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.

[参考译文] 编译器:函数不包括在C2000的二进制文件中,但不包括在MSP430的二进制文件中

Guru**** 2589265 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/605912/compiler-functions-not-called-included-in-binary-for-c2000-but-not-for-msp430

主题中讨论的其他部件:MOTORWARE

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

我正在C2000和MSP430中开发应用,并注意到编译器/链接器的工作方式有显著的不同。 在MSP430中,如果某个功能不是从main或ISR调用的,那么它不会像预期的那样包含在二进制文件中。 但是,在编译C2000应用程序时,在任何.c文件中定义的所有函数(和全局)都包含在最终程序中,从而产生一个巨大的二进制文件。

我试过编译器16.9 .1,16.9 .3和17.3 .0,没有区别。 在所有情况下,当我向主. c文件添加一个伪函数时,例如:

void opt_test (void)
{
int bla = 0;

如果(bla++)
返回;
} 

然后.text的大小增加,opt_test在.map文件中提到。 我正在使用-O3 (由于MotorWare对F2.8027万的限制,我无法使用-O4)和-MF 5 (优化大小)进行编译。

编辑:我使用优化助手测试了-MF的各种优化设置,所有选项都产生了相同的二进制大小,这可能是问题所在? 各种-O设置确实会按预期影响二进制大小。

此致,

Giannis

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

    我进行了一些挖掘,发现这是由于C2000编译器默认将.c文件的所有函数放在一个部分中,因此无法单独链接函数。 可以使用--gen_func_sections/-mo编译器选项来替代此选项,该选项位于CCS高级编译器选项下的运行时模型选项中。 同样,对于结构和数组,也有--gen_data_Subsections选项。

    对于MSP430,这些设置默认为“开”,对于C2000,默认为“关”。 将C2000的闪存和RAM的使用都设置为ON后,闪存和RAM的使用显著减少。

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

    我确认使用--gen_func_Subsections(使用--gen_func_Subsection)是处理这种情况的最佳方法。  感谢您分享您的详细体验。  我相信其他人会从中受益。

    谢谢,此致,

    -George