我已经使用 C8051F120 的不同库在 keil 中编写了 c 代码。但在某些情况下,当我在主程序中使用我的库函数时,它运行良好,但当我在定时器中断例程中使用该函数时,我的数据空间会溢出。
谁能告诉我这背后的原因是什么以及为什么这个数据空间会溢出?
总数据空间:128字节
在 main 中使用时:119 字节
在定时器例程中使用时:139字节(溢出)
我已经分析了 map 文件,但无法获取它。所以请帮我解决这个问题。
最佳答案
Can anyone please tell me what's the reason behind this and why this data space gets overflow ?
默认的 small
内存模型将变量放入 data
内存空间——总共只有 128 字节。
一个可能的解决方案是将编译器切换到 large
内存模型,它将变量放入 xdata
内存中。 XDATA
明显更大(在 C8051F120 上为 8KB)。请注意,这会带来性能损失 - 但这对于运行频率高达 100MHz 的 MCU 来说几乎无关紧要。
警告:C8051Fxxx
喜欢由于看门狗而卡在启动代码中,以防外部数据初始化量超过一定数量。看门狗超时只是比用闪存中的值加载 xdata 所需的时间短。在 large
内存模型中,这可能会影响您。解决方法是使用正确处理 WDT(或简单地禁用它)的启动代码。
关于c - 数据空间溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51645960/