我在一台基于 STM32 的设备中检测到 RAM 中存在数据损坏。
这个问题非常罕见 不可重现。在一台设备中,我仅看到一位损坏。但它会造成很大的损害。从其他损坏设备的行为来看,我了解到在同一区域发生了类似但不相同的数据损坏。
损坏的值属于静态全局数组,在运行时不会被修改。从Map文件中,我可以看到数组放置在RAM基地址中。
我想找出这种腐败的根本原因。最有效的方法是什么?
项目是使用 IAR EW for ARM 开发的,我使用的是 ST-Link V2 调试器。
复制您的数据并在您的代码上散布验证代码,如
assert(0==memcmp(&Data, &Copy, sizeof(Data)));
。这是一种低级方法,需要花费大量时间,但可能有助于缩小内存损坏发生的范围。说真的,我通过使用像assert(*(int*)0x123==456);
这样的丑陋代码来定位内存损坏。