This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:如何在编译时完成堆栈分配、以及如何在运行时监控堆栈的使用?

Guru**** 2466550 points
Other Parts Discussed in Thread: CC2530

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1118815/cc2530-how-is-the-stack-allocation-done-in-compile-time-and-how-to-monitor-its-use-in-runtime

器件型号:CC2530

您好!

我正在尝试了解堆栈和堆的 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 、但无法理解这些差异。

最好从更简单的解释开始
并参考您可能拥有的任何资源、更详细地了解这些信息?   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) 1)堆栈大小由 IAR 项目属性静态确定、堆大小在 board.h 内设置、其他 RAM 由单独的项目设置分配。

    2) 2) 8052 iDATA 在 SoC XDATA 空间上重叠。  您不应干扰 ISTACK、因为它与 MCU 内核有关。

    3) 这些是 General Options > Stack/Heap > Stack sizes > XDATA 中的值、PDATA/iDATA 不应被改变。

    4) 4) 8051 MCU 内核不 是溢出检测/调试的最佳选择。

    https://www.ti.com/lit/swra635

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ryan  
    关于 Q3的答案)
    我不打算更改这些值中的任何一个、只是想了解其用途、 PDATA_STACK 用于什么而不是 XDATA_STACK?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    除了  您已经参考过的 EW8051_CompilerGuide 中提供的信息、我没有任何其他信息。

    此致、
    Ryan