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