我知道这个话题很模糊......所以我会试着解释一下。
我正在 IAR Workbench 中开发一个项目。我已经到了如果我添加一个新特性,比如一个简单的 if 语句,整个代码结构就会中断的地步。代码可以正常编译并下载到 8051 设备,但是在代码启动序列的中途,我失去了连接。好像发生了堆栈溢出。如果我暂停调试器,我会看到我的 XdataStack 和 IdataStack 值很低(小于 50%)并且没有要报告的堆栈溢出。
事实上,导致问题的代码甚至没有被应用程序调用。
如果我启用代码中的调试#define 常量,这一点会更加明显。启用此功能会导致将更多字符串常量内置到 UART 调试代码中。
我执行的另一个测试是在一个已经存在的函数中创建一个包含 100 个字符的数组
char hello[100];
memset(hello, 0x00, 100);
这似乎也破坏了代码。
我想知道是否有我应该查看的内存区域,看看我是否已经填满了这个设备(CC2540,闪存大小为 128Kb)
IAR 让我调查:
- IDATA
- XDATA
- SFR
- 逻辑代码
- 代码
- 数据
- 数据
就我的项目配置而言:
堆栈大小:
- 数据:0xC0
- 数据:0x00
- X数据:0x280
堆大小:
- XDATA:0xFF
- 远:0xFFF
- Far22:0xFFF 巨大:0xFFF