将修改--rom_model 成--ram_model后进入LPM3.5睡眠,在唤醒后用printf打印数据后指针跑飞。
上图这个是未睡眠之前的函数地址。
上图是唤醒后的函数地址,在执行这条汇编语句时,跳转到该地址导致程序跑飞。
请问怎么解决,原先图片错误,已经进行更改?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
将修改--rom_model 成--ram_model后进入LPM3.5睡眠,在唤醒后用printf打印数据后指针跑飞。
上图这个是未睡眠之前的函数地址。
上图是唤醒后的函数地址,在执行这条汇编语句时,跳转到该地址导致程序跑飞。
请问怎么解决,原先图片错误,已经进行更改?
你好,在CCS里面设置的MSP430LINK里面设置的将rom更改成ram
该问题在LPM3没有出现,包括上个唤醒时间长的问题也为出现。因为LPM3的内核不会掉电,就不会有ram和rom的设置问题了,只有在内核掉电的情况下,才会有问题。
更改依据来自以下
你好,我下午又进行测试,板子不进入睡眠,使用RST引脚复位板子不会触发这个问题,掉电在上电会触发这个问题。目前是掉电和LPM3.5会触发这个问题,复位和LPM3不会触发这个问题,看手册启动流程,LPM3.5和复位的流程一样的流程见下图,所以我问一下,复位会使MCU内核掉电吗?
你好,
1.我认为从 UG 中可以看出,复位引脚与 LPM3.5具有相同的效果。 奇怪的是,您的测试结果是不同的。
2.我假设复位后RAM 数据不会被清除,从您的测试结果来看,这不符合 UG。
3.我认为你可以在开始时添加一些代码来检查 RAM 是否为0xFFFF,使用 GPIO 告诉你结果。
所以我问一下,复位会使MCU内核掉电吗?
你好,他应该是在回复这个问题。如果内核掉电的话,那么RAM数据将会丢失,反之,RAM数据将不会丢失。我将与他进行确认。
你好,正如我检查的,锁定功能地址在RAM上,
你可以检查一下:我认为问题可能出在RAM初始化问题上。
1.当您进入主函数时,0x2C14的值是否固定。
2.并且该值始终为:
这个问题有点难理解。
你好,我这边进行测试
1:这个地址现在是2300,我进行重新下载,复位都是这个地址。
2:跑飞地址,目前多次测试会发生变化,但是变化规律不清楚。
3:我的更改操作之将rom更改成ram,带来的变化是全局变量的更改会发生变化,我并不明白为什么函数地址会发生变化?
你好,
1.您能否检查进入 LPM3.5之前以及从 LPM3.5退出并跳转到 main 函数/int00之后的地址?
2.我想确保地址由 MCU 或您项目中的代码设置。
抱歉令你感到困惑。我是这个意思:
1.问题在于_lock 的值错误。 我假设这个问题只发生在这个函数上。
2.我想检查_lock函数地址是固定(改变)在主函数之前还是之后,如果是在主函数之后,这意味着可以通过改变您的代码来解决问题。如果是在主函数之前以及int00之后,这意味着您只能通过更改编译器配置(如降低优化级别、更改堆栈大小)来解决该问题。
3.你可以在调试模式中检查_lock的值。
你好:
我这里检查,在这里数值已经被更改了。
问题在于我更改了编译器的选项,造成的这个问题,具体出现这个问题的根本原因不清楚,以至于在别的地方是否也存在这种问题,
使我的代码崩溃。
你好,问题出在model option上。你可以在该文件上看到更多细节:coecsl.ece.illinois.edu/.../TI_CompilerReference.pdf
全局变量在运行时不会被初始化,它看起来会在加载程序之前初始化,但是它不适用于该变量。此问题与编译器有关,最简单的解决办法是自行初始化 _lock 地址 。
之所以上电或LPM3.5会导致此问题,是因为执行这些操作后RAM将被清除。如果地址正确那么它将不会在复位时掉电和清除,您将看到差异。