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.
您好!
我在编译一个简单项目时收到警告。 该项目编译正常并且在真实的硬件上工作、但此警告只是刚刚出现、并且在项目开始时不存在。
警告#10229-D 输出段".data"指加载符号".init_array"、因此无法压缩;压缩"lzss"被忽略。
我有3个结构用于控制外设、声明如下:
存储器分配如下所示:
我的问题是:为什么要声明第一个结构、 SENSE_L、 尽情体验 .数据 部分中、并且将会将其余的 .bss ?
如果我交换 传感_L 和 传感_R 随后的声明 传感_R 被置于 .数据 而是首先声明它位于 .数据 。
这种情况才刚刚开始、在早期版本中全部放入 .bss 。
我最近唯一做的更改是使用类枚举项而不是直枚举项、并添加了运算符和覆盖项。
我已经意识到、使用优化级别2+会导致这一问题。
使用级别0或级别1可将所有7个对象 .bss 应该处于的位置、但是代码大小几乎增加了一倍。
您好、Simom
我想知道您使用的 CCS 版本和编译器版本。
该问题之前出现过、 https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/561407/compiler-msp430f5310-10229-d-output-section-data-refers-to-load-symbol-_nop-and-hence-cannot-be-compressed-ccs-6-2-msp430f5310-compiler-16-9-1 和 https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/86954/arm-4-6-4-linker-warning 中对 E2E 主题进行了一些讨论
您能看一下之前的讨论吗? 希望这些信息可作为有用的参考。
谢谢!
CCS 版本12.3.0
编译器版本21.6.0 LTS
我查看了你提到的2个线程,我在发布前发现了这些线程,但它们似乎与我的问题无关,因为我不使用 extern 的,指针或数组。
我已经做了一些调查、并找到了一个可触发此警告的简单测试案例:
#include "driverlib/driverlib.h" struct Device_Output { const unsigned char m_a; const unsigned char m_b; Device_Output(const unsigned char a, const unsigned char b) : m_a(a), m_b(b) { GPIO_setOutputLowOnPin(m_a, m_b); GPIO_setOutputLowOnPin(m_a, m_b); } }; Device_Output OUT_A(GPIO_PORT_P1, GPIO_PIN0); Device_Output OUT_B(GPIO_PORT_P1, GPIO_PIN1); int main(void) { }
如果我删除其中一个 double GPIO_... 则警告消失。
我看不出发生这种情况的明显原因。
我设法通过将结构更改为模板结构来修复它。
由于结构用作抽象层、所有方法都是静态的、并且所有数据在编译时都是常量和已知的、因此在 .bss 或 .数据 因此代码大小也从2698字节适当地减小到了2284字节。
非常感谢