2

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

我试图在内存表中查找它们,模式看起来像 ff 3f ff 3f ...。这个模式从 0x1C00-0x1CFF 开始;数据显示在 0x1D00 - 0x2BFF。根据CC430F6137的datasheet,RAM的section 0范围为0x1C00-0x23FF,一共2KB。第 1 节的范围从 0x2400 到 0x2BFF。

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

我试过模拟器,没问题。我还使用 MSP430F449 的静态变量(由 TI LPT MSP430 调试器)创建了一段简单的代码,并且还可以看到静态变量。有谁知道为什么会发生这种情况以及可能的解决方案?提前致谢!

此错误已在最新版本的 IAR Embedded Workbench 中修复

4

1 回答 1

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


生成映射文件(Project->Options->Linker->List、Generate linker Listing、Segment map、Module map)。在 Debug/List 中找到映射文件并搜索您的全局静态变量。它应该在 DATA16_Z 部分中(或者可能在 DATA16_I 部分中,在 DATA16_ID 中具有用于初始化值的相关槽)。

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


您可以尝试从调试器中写入地址 0x1CED 吗?您可以使用“内存”窗口对其进行测试,然后回读。这将确认内存插槽本身正在工作。

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

于 2011-10-04T09:01:57.933 回答