TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430FR5994: 将链接器配置修改–rom_model 成–ram_model后的启动问题

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将被清除。如果地址正确那么它将不会在复位时掉电和清除,您将看到差异。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR5994: 将链接器配置修改–rom_model 成–ram_model后的启动问题
分享到: 更多 (0)