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:TMS570LC4357 - safeti 库使用-堆栈数据设置

Guru**** 2539500 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/834865/ccs-tms570lc4357---safeti-library-use---stack-data-setting

工具/软件:Code Composer Studio

我使用 safeti 库。

  我想知道堆栈的大小。

   在 cmd 文件中、我设置了存储器、下面是几个部分。

/*------------------ *
/*内存映射                                                                */

存储器

   引导程序(X)   :origin=0x00000000 length=0x00000020
   FLASH0 (RX)  :origin=0x00000020 length=0x001FFFE0
   FLASH1 (RX)  :origin=0x00200000 length=0x00200000

   堆栈 (RW)  :origin=0x08000000 length=0x00021800
   RAM (RW)   :origin=0x8021800 length=0x19000
   HIGH_Handler    (rwx) :origin=0x803A800 length=0x000800
   profile (RW)   :origin=0x803B000 length=0x00008000 //添加用于分析目的*/
   日志(RW)   :origin=0x8043000 length=0x00003000 ffill=0xDEADBEF/*添加用于记录目的*/
   FEE (R)   :origin=0xF0200000 length=0x00000064 fill=0xDEADBEF/*用于 FEE 测试,仅对示例应用有效*/


/*------------------ *
/*段配置                                                     */

部分

   .expt_vecs :start( ulFlashStartAddr ){}>向量
   sl_stflash_SRAM   :run = high_handler、load = FLASH0|FLASH1、load_start (ulHighHandlerLoadStart)、load_end (ulHighHandlerLoadEnd)、
         load_size (ulHighHandlerSize)、run_start (ulHighHandlerStartAddr)、run_end (ulHighHandlerEndAddr)
   .text     :{}>FLASH0|FLASH1  
   const    :end( ulFlashEndAddr )
            {}> FLASH0|FLASH1
   .cinit     :{}>FLASH0|FLASH1
   .pinit     :{}>FLASH0|FLASH1
   stack_data_svc    :{. += 1024;}>堆栈、RUN_START (StackModeSVC)
   stack_data_fiq    :{. += 1024;}>堆栈、run_start (StackModeFIQ)
   STACK_DATA_IRQ    :{. += 1024;}>堆栈、run_start (StackModeIRQ)
   stack_data_abt    :{。 += 1024;}>堆栈、run_start (StackModeABT)
   stack_data_und    :{. += 1024;}>堆栈、run_start (StackModeUND)
   stack_data_sys    :{. += 132096;}>叠块、RUN_START (StackModeSYS)
   .bss     :{}> RAM
   .data     :{}> RAM
   .sysmem  :{}>RAM

   log_data  :start( ulLOGStartAddr ),end( ulLOGEndAddr )> log
   profile_data       :start( ulPROFESStartAddr ),end( ulPROFESEndAddr )> profile

然后、在映射文件中装满所使用的堆栈。

存储器配置

        名称           源   长度     使用    未使用  的属性   填充
------------  ----  ------  ----  ----  --------  
 向量              00000000  00000020 00000020 00000000    X
 FLASH0               00000020  001fffe0 00019dd8 001e6208 R X
 FLASH1               00200000  00200000 00000000 00200000 R X
 堆栈               08000000  00021800 00021800 00000000 RW  
 RAM                  08021800  00019000 000043c0 00014c40 RW  
 HIGH_Handler         0803a800  00000800 00000330 000004d0 RW X
 配置文件              0803B000  00008000 00000000 00008000 RW  
 log                  08043000  00003000 00003000 00000000 RW   死牛肉
 F0200000                    00000064 00000064 00000000 R    dad牛肉

 然后、我想知道 用户堆栈在哪里? 对于用户来说、使用132096尺寸的堆叠是正确的设置?

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

    您好!

    [引用 USER="MINWOO LIM"] 然后,我想知道 用户堆栈在哪里?

    按“用户堆栈”,您是指 STACK_DATA_*? 如果是这样、您引用的链接器映射文件部分仅包含链接器 CMD 文件的 MEMORY 指令中定义的存储器区域。  

    段中定义的 STACK_DATA_*区域将在栈内存区域中聚合。   

    [引用 user="MINWOO LIM"]t 是将堆栈用于用户的正确设置、大小为132096?

    堆栈分配高度依赖于您的应用要求、没有一般性声明要求堆栈处于给定的大小。  

    有关链接器 CMD 文件的有趣文献:

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html 

    希望这对您有所帮助、

    拉斐尔

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

    您好、Rafael

    好的、我看到堆栈不能预先决定大小。 但存储器映射是由代码构建的、显示堆栈全部被使用

    存储器配置

            名称           源   长度     使用    未使用  的属性   填充
    ------------  ----  ------  ----  ----  --------  
     向量              00000000  00000020 00000020 00000000    X
     FLASH0               00000020  001fffe0 00019dd8 001e6208 R X
     FLASH1               00200000  00200000 00000000 00200000 R X
     堆栈               08000000  00021800 00021800 00000000 RW  
     RAM                  08021800  00019000 000043c0 00014c40 RW  
     HIGH_Handler         0803a800  00000800 00000330 000004d0 RW X
     配置文件              0803B000  00008000 00000000 00008000 RW  
     log                  08043000  00003000 00003000 00000000 RW   死牛肉
     F0200000                    00000064 00000064 00000000 R    dad牛肉

    不管代码是什么?

    此致、

    米尼宇

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

    米尼宇

    堆栈是动态使用的。 链接器.map 文件显示了代码运行时可使用的分配内存。  

    但是、突出显示的部分显示了堆栈内存段被分配给内存段的数量。  

    换言之:

    STACK_DATA_SVC→0x400
    STACK_DATA_FIQ →0x400
    STACK_DATA_IRQ →0x400
    STACK_DATA_abt →0x400
    STACK_DATA_UND →0x400
    STACK_DATA_sys→0x20400
             ----
             0x21800

    此致、

    拉斐尔