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"被忽略。

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1236424/warning-10229-d-output-section-data-refers-to-load-symbol-init_array-and-hence-cannot-be-compressed-compression-lzss-is-ignored

器件型号:MSP430FR2433

您好!

我在编译一个简单项目时收到警告。 该项目编译正常并且在真实的硬件上工作、但此警告只是刚刚出现、并且在项目开始时不存在。

警告#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 的,指针或数组。

    我已经做了一些调查、并找到了一个可触发此警告的简单测试案例:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #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) { }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    如果我删除其中一个 double GPIO_... 则警告消失。

    我看不出发生这种情况的明显原因。

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

    我设法通过将结构更改为模板结构来修复它

    由于结构用作抽象层、所有方法都是静态的、并且所有数据在编译时都是常量和已知的、因此在 .bss .数据 因此代码大小也从2698字节适当地减小到了2284字节。

    非常感谢