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.
工具/软件:TI C/C++编译器
您好,
我使用C2000编译我的项目,并将标志设置为:
-v28 -ml -mt --float_support=fpu32 --tmu_support=tmu0 --cla_support=cla1--vcu_support=vcu2 -O2 --opt_for speed=3...
问题是我定义了一个带有volatile的全局变量,但似乎我从未在代码中明确引用它,所以它经过了优化,在.map文件中找不到它。
.cpp:
volatile const int __attribute__((section(".init_proc"),used )) test =99;
地图:
...
init_proc
* 0.0827万 0008278万 0000万未初始化
.text:lib
...
谢谢!
邵玉
很遗憾,我无法再现此问题。 您的代码是否组织为CCS项目? 如果是这样,我希望您按照项目 共享一文中的说明将其打包,然后将该zip文件附加到下一篇文章。
谢谢,此致,
-George
Keith Barkley,
是的,这是有意义的,但实际上我在.init_proc部分引用这些变量,并使用指向指定该部分位置的链接程序脚本符号的指针。
所以我试着用关键字和属性选项告诉编译器,这些变量可能被引用,甚至被隐式修改,但正如你所看到的,它不起作用。
感谢你的回复:))
George,
我 使用6.2 0.0.005万 版本处理项目,我需要请求上载项目的权限,这可能需要一些时间。
顺便说一句,我通过在 声明中添加关键字extern来解决问题,使其处于全局范围内,它工作正常,但这仍然不能解释为什么C2000编译器会忽略"used (已使用)"属性。 是否有任何编译器选项允许它执行此操作?
我会尽快上传项目,非常感谢您的快速回复:)))
邵玉
考古学家,
是的,我确实尝试了
#pragma保留
volatile const int __attribute__((section(".init_proc"))) test =99;
但仍然不起作用。
暗示文件范围的const似乎会覆盖编译器指令。 (--keep unneeded_statics未选中)
感谢您的回复:]]>
邵玉
Shaoyu Chen 说:我通过向 声明中添加关键字extern来解决问题,使其处于全局范围[/QUOT]
我怀疑您正在C++模式下编译(选项--cpp_default,也称为-fg)。 在C++中,声明为"const"的全局变量被视为TRUE常量,可以由编译器删除。 如果要保留变量,必须将其声明为"extern const"。 或者,您可以将文件编译为C文件,而不是C++文件。
这不能解决二手车的问题,这是一个单独的问题。