2011-08-31 105 views
2

我一直在寻找两个小时的原因。现在我正在使用IAR Embedded Workbench Evaluation 5.30在CC430F6137开发套件板上进行调试。正如我已经声明了一些全局静态变量,我意识到我无法正确地观察它。它们显示为FF或3F。使用IAR Embedded Workbench 430调试CC430F6137时无法看到静态变量5.3

我试图在内存表中查找它们,模式看起来像ff 3f ff 3f ....这种模式持续从0x1C00-0x1CFF;数据显示在0x1D00 - 0x2BFF。根据CC430F6137的数据表,RAM的0段的范围为0x1C00 - 0x23FF,总共为2KB。第1部分的范围从0x2400到0x2BFF。

例如,根据观察窗口,静态变量位于0x1CED。但是,该值是0x3F。当我使用局部变量复制该静态变量的值时,它不是0x3F。我的静态变量位于第0部分的小边界区域(具有奇怪的模式)。 我的硬件:TI的USB-MSP430调试接口。评估板是EM430F6137F900。

我试过模拟器,没问题。我还用MSP430F449的静态变量(TI LPT MSP430调试器)创建了一段简单的代码,还可以看到静态变量。 有没有人有任何想法为什么发生这种情况和可能的解决方案?提前致谢!

此bug已被固定在IAR最新版本的Embedded Workbench的

+0

你使用的是“静态观察窗口”吗? EWB有一个单独的窗口用于查看静态数据。 – Clifford

+0

我尝试了静态观察窗以及普通观察窗。他们都显示FF或3F。符号存储器中的对应地址也是FF 3F模式 –

+1

我不知道什么是错误的,但我可以给你一些关于如何找出问题的提示。首先,检查链接器映射文件,确保变量确实放置在有RAM的地方,并确保链接器和调试器具有相同的世界视图。其次,取消选中“run to main”框并单步执行cstartup代码以验证它是否正确初始化了内存(它应该清除DATA16_Z段并将DATA16_ID复制到DATA16_I)。 – Lindydancer

回答

1

这里有几个建议:


你使用RAM禁用功能在所有(RAMCTL)?

RAM存储器由n个扇区组成。每个扇区都可以完全断电以节省泄漏,但是,所有数据都会丢失。 RAM存储器的功能包括:

•RAM存储器有n个扇区,每个扇区2k字节。

•每个扇区0至n可以完全禁用,但数据保留丢失。

•如果可能,每个扇区0到n自动进入低功率保持模式。


使用任何睡眠模式?我正在考虑LPMx.5。

当输入LPMx.5(LPM3.5或LPM4.5)时,电源管理模块 (PMM)的电压调节器处于关闭状态。所有的RAM和寄存器内容都会丢失。


您写道:

当我使用一个局部变量的值从静止无功复制,然而,这不是0x3F的。

您的意思是说,在全局静态或本地复制同时使副本和全局静态工作时,本地副本不是0x3F?

如果复制使这两个工作,我想静态全局从不引用。做它volatile。生成地图文件(项目 - >选项 - >链接器 - >列表,生成链接器列表,分段映射,模块映射)。在Debug/List中查找映射文件并搜索您的全局静态变量。它应该在DATA16_Z部分(或可能在DATA16_I部分中,在DATA16_ID中有一个相关插槽用于初始化值)。

如果不是那么你有问题,我相信你可以在EW430_CompilerReference.pdf章节“段的描述”中找到有趣的信息。


您可以尝试从调试器中写入地址0x1CED吗?您可以使用Memory窗口来测试并回读。这将确认内存插槽本身正在工作。

如果不起作用,芯片的RAM可能损坏。这可以解释为什么你有一个在0x1C00-0x1CFF范围内的模式,但不在这之外。

+0

事实证明,这是IAR调试器中的一个错误。不管怎样,谢谢你。 –

+0

IAR告诉过你吗?如果你还没有向他们报告过,你绝对应该这样做。 – Gauthier

+0

他们已经修复了最新版本。 –