您好!
我正在尝试了解堆栈和堆的 RAM 的内存预留和使用情况。
IAR .map 文件中
我们可以看到在编译结束时显示的统计数据
Q1) 8KB 的7.5kb RAM 用于 XDATA 内存,剩余的内存会发生什么情况,它是用于堆栈还是堆?
212 855 bytes of CODE memory (+ 47 149 range fill )
32 bytes of DATA memory (+ 81 absolute )
7 479 bytes of XDATA memory
192 bytes of IDATA memory
8 bits of BIT memory
454 bytes of CONST memory
Q2) 此处提到堆栈的位置有2个
XSTACK 和 ISTACK 有何不同? 何时使用它们?
XSTACK XDATA 00000001 - 00000400 400 rel 0 XDATA_Z XDATA 00000401 - 0000100E C0E rel 0 XDATA_I XDATA 0000100F - 00001135 127 rel 0 <XDATA_N> 1 XDATA 00001136 - 00001D37 C02 rel 0 <XDATA_ROM_C> 1 CONST 00008000 - 000081C5 1C6 rel 0 ISTACK IDATA 00000040 - 000000FF C0 rel 0
Q3)在构建命令中定义了2个堆栈宏、 它们有何不同? 何时使用它们?
# -D_PDATA_STACK_SIZE=0x80 # # -D_XDATA_STACK_SIZE=0x400 #
Q4)是否有任何资源可用于检测 CC2530中的堆栈溢出?
我已经浏览 过 https://wwwfiles.iar.com/8051/webic/doc/EW8051_CompilerGuide.pdf 、但无法理解这些差异。
最好从更简单的解释开始
并参考您可能拥有的任何资源、更详细地了解这些信息?