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.

[参考译文] CCS/UCD3138A:如何配置链接器#39;s 堆栈大小和堆大小

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/615369/ccs-ucd3138a-how-to-configure-the-linker-s-stack-size-and-heap-size

器件型号:UCD3138A

工具/软件:Code Composer Studio

大家好、TI 人、

"Properties -> Build -> ARM Linker -> Basic Options ->-heap_size &--stack_size"与"cyclone.cmd"文件中的堆栈和堆分配之间是否存在任何连接?  我应该配置它们的值是多少?  

存储器

   VECS          :org = 0x00000000,len = 0x00000020   //矢量表               */
   ROM           :org = 0x0000A020、len = 0x00001D5E   //系统 ROM                 */
   Sine          :org = 0x0000BD7E,len = 0x00000282   /* Sine table                 */
   pflash   (RX):org = 0x00000020,len = 0x00007F38   /* pflash 主程序        */
   DeviceID (RX):org = 0x00007F58,len = 0x00000020   //设备 ID 的固定位置*/
   FIXTFA   (RX):org = 0x00007F78,len = 0x00000004   // TFA 的固定步长    */
   FIXCONST (RX):org = 0x00007F7C,len = 0x00000080   //固定位置常量   */
   FLASHSUM (RX):org = 0x00007FFC,len = 0x00000004   //闪存校验和             */
   DFLASH   (RX):org = 0x00018800,len = 0x00000800
   测试仪   (RW):org = 0x00019000,len = 0x0000001C
   RAM_for_program_area (RW):org = 0x0001901C,len = 0x00000080
   RAM      (RW):org = 0x0001909C,len = 0x000008E1
   堆栈   (RW):org = 0x0001997 D,len = 0x0000067F
   ROMLOCK  (RW):org = 0x00019FFC,len = 0x00000004

期待您的回复

最恰当的考虑

黄达纳

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

    很抱歉、我不能附加图片。 -heap_size 为10、-stack_size 为200、它们与"cyclone.cmd"文件上分配的堆和堆栈空间不同。 我对此感到困惑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了节省代码空间、我们使用了自定义 c 初始化代码、该代码未很好地连接到 CCS 和.cmd 文件。  

    没有堆初始化、因为我们不认为使用 RAM 有限的电源控制器是一个好主意。  

    堆栈大小通过 load.asm 中的这些语句声明、因此您需要在此处更改堆栈。

    如您所见、无论如何、支持的堆栈都要多于 CCS 结构。

    SUP_STACK_TOP  .equ 0x19ffc;监控器模式(SWI 堆栈)从存储器顶部开始
    fiq_stack_top .equ 0x19e00;为监控器堆栈分配256个字节、然后执行 FIQ 堆栈
    IRQ_STACK_TOP .equ 0x19d00;为 FIQ 堆栈分配256个字节、然后启动 IRQ 堆栈
    USER_STACK_TOP .equ 0x19b00;为 IRQ 堆栈分配512个字节、常规堆栈处于静止状态、一直到变量

    cmd 文件不会影响堆栈位置、但最好定义 RAM 部分、使其低于您期望达到的存储器最低点。  这样、如果变量扩展到堆栈空间、您将收到警告。

    以下是来自同一代码的.cmd 文件的示例。  


       测试仪   (RW):org = 0x00019000,len = 0x0000001C
       RAM      (RW):org = 0x0001901C,len = 0x00000E50
       堆栈   (RW):org = 0x00019E6C,len = 0x00000190
       ROMLOCK  (RW):org = 0x00019FFC,len = 0x00000004

    很显然、它不匹配。  

    您可以移除测试仪和 ROMLOCK、它们保留在先前版本中、并且显然堆栈太小。  

    因此、更正后的版本如下所示:

       RAM      (RW):org = 0x00019000、len = 0x00000a00
       堆栈   (RW):org = 0x00019a00,len = 0x00000600

    取出测试仪和 romlock 时、还需要卸下以下线条:

       TETERVAs     :{}>测试仪                   /*测试仪命令变量已固定        */
       romlock       :{}>ROMLOCK                  /*防止 ROM 刷写自动跳转   */