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.

[参考译文] 编译器/TMS320F28335:"xxxx":对象未初始化时忽略加载放置

Guru**** 2614265 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/648502/compiler-tms320f28335-load-placement-ignored-for-xxxx-object-is-uninitialized

器件型号:TMS320F28335

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

您好!  

我有一个自定义 cmd 文件、它定义了一些我想要校准的参数的加载和运行位置。 行为和设置与另一个线程非常相似、该线程目前已锁定

唯一的区别是我在28335上、而不是使用 CLA。

经过几个 trys 之后、我发现这些语句类似

#pragma DATA_SECTION (aDataName、"aDataSec")

int aDataName = 1234;

在自定义声明的 DATA_SECTION 中、不会被视为"初始化数据"、因此会出现警告和错误行为。  

通过添加 const 关键字、我得以解决问题:

#pragma DATA_SECTION (aDataName、"aDataSec")

const int aDataName = 1234;

然后警告消失、数据被放置在正确的闪存位置。

但这个数据名 var 并不是真正的常量。 我将在运行位置对其进行调优、即 RAM。 我不会在代码中更改它、而是直接使用存储器写入来更改它、因此我宁愿不将它声明为 const。

编译器团队的任何人是否可以研究此问题? 为什么编译器不接受具有初始值声明的标准 C 语句? 这是编译器中的错误吗? 是否有参考文档?  

我在论坛上看到了一些类似的帖子、但我认为其中任何一个都没有得到直接的答案。

谢谢。

此致

gzhang

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

    下面的讨论涉及静态或全局变量、而不是函数局部变量。

    当你写一些类似的东西时...

    int normal_var = 10; 

    编译器在两个不同的段中进行条目。  它会在读取-写入段(通常为.ebss)中为变量 normal_var.  它会在.cinit 段中排列一条记录、当在引导时进行处理时、该记录会将值10复制到 normal_var.

    与之形成对比...

    const int const_var = 20; 

    在这种情况下、编译器仅在只读段(通常为.econst)中生成一个条目。  该条目会创建和初始化变量。

    我觉得这部分很混乱...

    [引用 user="Leong"]但此数据名 var 并不是真正的常量。 我将在运行位置对其进行调优、即 RAM。 我不会在代码中更改它、而是直接使用存储器写入来更改它、因此我宁愿不将其声明为 const。

    (笑声) 因此、我不确定您应该怎么做。  但我相信您可以通过使用此解释来了解非 const 初始化变量与 const 初始化变量之间的差异。

    谢谢、此致、

    乔治