我一直在寻找两个小时的原因。现在,我正在使用IAR Embedded Workbench Evaluation 5.30在CC430F6137开发套件板上进行调试。由于我已经声明了一些全局静态变量,我意识到我无法正确观察它。它们显示为FF或3F。
我试图在内存表中查找它们,模式看起来像ff 3f ff 3f ....这个模式最后来自0x1C00-0x1CFF;数据显示在0x1D00 - 0x2BFF中。根据CC430F6137的数据表,RAM的第0部分范围为0x1C00 - 0x23FF,总共为2KB。第1节的范围从0x2400到0x2BFF。
例如,根据监视窗口,静态变量位于0x1CED。但是,该值为0x3F。当我使用局部变量来复制静态var中的值时,它不是0x3F。我的静态变量落在第0节的一个小边界区域(有奇怪的模式)。 我的硬件:TI的USB-MSP430调试接口。评估板是EM430F6137F900。
我试过模拟器,没问题。我还使用静态变量为MSP430F449(TI LPT MSP430调试器)创建了一段简单的代码,也可以看到静态变量。 有谁知道为什么会发生这种情况和可能的解决方案?谢谢!
此错误已在最新版本的IAR Embedded Workbench中修复
答案 0 :(得分:1)
以下是一些建议:
您是否正在使用RAM禁用功能(RAMCTL)?
RAM存储器由n个扇区组成。每个扇区都可以完全断电以节省泄漏, 但是,所有数据都会丢失。 RAM存储器的功能包括:
•RAM存储器有n个扇区,每个扇区2k字节。
•可以完全禁用每个扇区0到n,但数据保留会丢失。
•每个扇区0到n尽可能自动进入低功耗保持模式。
正在使用任何睡眠模式?我正在考虑LPMx.5。
进入LPMx.5(LPM3.5或LPM4.5)时,电源管理模块的电压调节器 (PMM)已禁用。所有RAM和寄存器内容都将丢失。
您写道:
当我使用局部变量来复制静态var中的值时,它不是0x3F。
你是说全局静态是本地副本不是0x3F,还是复制使副本和全局静态工作?
如果复制同时工作,我想从不引用静态全局。设为volatile
。
生成地图文件(项目 - >选项 - >链接器 - >列表,生成链接器列表,段映射,模块映射)。在Debug / List中找到映射文件,然后搜索全局静态变量。它应该在DATA16_Z部分(或者可能在DATA16_I部分,在DATA16_ID中有一个相关的插槽用于初始化值)。
如果不是那么你有问题,我相信你可以在EW430_CompilerReference.pdf,“段的描述”一章中找到有趣的信息。
您可以尝试从调试器中写入地址0x1CED吗?您可以使用“内存”窗口对其进行测试,然后回读。这将确认内存插槽本身正在工作。
如果它不起作用,芯片的RAM可能会损坏。这可以解释为什么你的模式在0x1C00-0x1CFF之内,但不在其中。