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.

[参考译文] 编译器/TMS320C6678:未创建.stack部分

Guru**** 2535750 points
Other Parts Discussed in Thread: TMS320C6678

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/571269/compiler-tms320c6678-section-stack-not-created

部件号:TMS320C6678

工具/软件:TI C/C++编译器

您好,  

我当前使用 CGT_C6000_DSP 0代码生成工具在8.1 TMS320C6678上制作一个启动软件(_c_int00)。

链接程序命令文件为;  

    --rom_model
     --stack_size=0x2000
     --heap_size=0x2000
     --entry_point _c_int00

     --cinit_compression=off

     内存
     {
          L1PSRAM (rwx):org = 0x00E0万,len = 0x8000
          L1DSRAM (rwx):org = 0x00F0万,len = 0x8000

          L2SRAM (rwx):org = 0x80万,len = 0x8万

          msmcsram (rwx):org = 0x0C0万,len = 0x40万
          DDR3 (rwx):org = 0x8000万,len = 0x8000万
     }

     章节
     {

        组(近_近_近_近)
        {
            .neardata
            .rodata
            BSS
        }           > L2SRAM

        堆栈      负载= 0x80万

        sysmem  > L2SRAM

        .fardata   > L2SRAM
        。const      > L2SRAM
        远        > L2SRAM

        cinit       > L2SRAM
        首席信息官        > L2SRAM

        文本       > L2SRAM (高)
    }

除非 在源代码中添加了以下汇编器指令,否则不会创建.stack部分:

        __stack: .usect  ".stack",0,8

 

这种行为是正常的,还是在启动执行过程中必须预见到异常行为?

非常感谢您的回答

Alban Michelangeli

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

    [引述用户="Alban Michelangeli"]

    除非 在源代码中添加了以下汇编器指令,否则不会创建.stack部分:

            __stack: .usect  ".stack",0,8

    [/引述]

    必须在系统中的某个位置创建.stack部分。  但这不是典型的发生方式。

    以下是它的典型工作方式。  您可以使用开关--rom_model。  除其他外,这会告诉链接程序遵守链接C或C++程序的约定。  其中一种约定是入口点是符号_c_int00。  该符号在对象模块boot.obj中定义。  相应的源文件为boot.c.  该文件也定义了堆栈。  对象模块boot.obj位于编译器RTS库中。  在链接程序调用中引用RTS库的常用方法是使用选项-l libc.a。  

    总之,在使用--rom_model时,还应使用-l libc.a.  这将导致链接程序使用RTS库中定义堆栈的模块boot.obj。

      有关此主题的详细信息,请参阅C6000编译器手册中标题为“控制链接过程”的部分。

    谢谢,此致,

    -George

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

    非常感谢您的快速回答。

    我们的软件将根据DO-178C (航空软件开发规范)进行开发。
    要获得认证,源代码应完全由软件开发小组"控制"。
    因此,本软件不应使用任何编译器RTS库。
    我们将自己发展任何单一的共同功能(memcpy,memset,divu ...)。

    不管怎样,上述源代码行似乎是有效的,因为它允许创建堆栈部分

    此致

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

    我确认您创建堆栈的方法是合理的。

    [引用user="Alban Michelangeli"]我们将自行开发任何单一的通用函数(memcpy,memset,divu ...)。

    您可能会发现,了解编译器附带的RTS库的所有源代码非常有用。  如果已安装CCS,则会在类似的目录中找到它...

    C:8.1 \ti\ccsv7\tools\compiler\ti-CGT-C6000_Cps.2\lib\src. 

    谢谢,此致,

    -George

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

    你好,George

    非常感谢您的回答

    ALBAN