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.

[参考译文] 编译器/TMS320F2.8375万S:CGTv 6.4 .................................................................4使用data_section

Guru**** 2553450 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/586319/compiler-tms320f28375s-cgtv6-4-4-strange-placement-with-data_section

部件号:TMS320F2.8375万S

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

下面的数据部分pragma出现了问题(F2.8375万S, CGTv 6.4。4)

 

例如,链接器命令已简化

内存

第0页:/*程序*/

              MEM1  :原点= 0x00b000,长度0x0.4万

第1页:/*数据*/

              RAM_STacks:原点= 0x0.0002万,长度0x0007FE

              CLA_RAM:          原点= 0x0.8万,长度= 0x0.2万       /* CLA RAM LS0-3 */

}

章节

              my_CLA_RAM   :> CLA_RAM,第=1页

}

在C文件中, 变量被声明为这样

#pragma data_section(sample,"CLA_RAM);//放置在CLA_RAM中,而不是my_CLA_RAM中

  UINT16样本=0;

在*.CLA文件包含的*.h文件中,

extern UINT16样本;

当放置在CLA_RAM中时,变量 "SAMPLE" 位于堆栈区域的0x0.0002万处。 没有发出警告。  当然,当放置在my_CLA_RAM中时,没有问题。

所以,只是想知道这种放置在堆垛区的情况,以及为什么没有发出警告。  这导致了一个奇怪的调试会话, 其根本原因是 CLA无法访问RAM中的变量。

谢谢!

Eric

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

    请注意,CLA_RAM是内存范围,My_CLA_RAM是输出部分的名称。  因此,您需要编写...

    #pragma data_section(sample,“My_CLA_RAM";//不是CLA_RAM 

    这将创建名为My_CLA_RAM的输入部分。  这是关键:您必须匹配输出 部分名称,而不是内存范围名称。  由于名称匹配,此输入部分将成为My_CLA_RAM输出部分的一部分,并且该输出部分将分配给内存范围CLA_RAM。

    有关内存范围,输出部分和输入部分的更多背景信息,请参阅Wiki文章 链接器命令文件入门的第一部分

    为了避免再次发生这种情况,请考虑采用以下非正式编码惯例:

    • 内存范围名称全部用大写字母写
    • 部分名称以所有小写形式书写,并以“”开头。

    谢谢,此致,

    -George