C(嵌入式):注释 FreeRTOS 的 RootTask 时代码大小不会缩小

C (Embedded): Code size does not shrink when commenting FreeRTOS' RootTask

本文关键字:代码 时代 缩小 RootTask 嵌入式 FreeRTOS 注释      更新时间:2023-10-16

我的FreeRTOS构造中有一个树形的过程/任务架构。main((只是创建一个RootTask(在初始化HAL之后(,它创建另外两个任务,依此类推

我目前正在与闪存大小(代码+常量,基本上是?(作斗争,因此禁用任务(=注释它们(,以便向编译器表明大多数翻译单元甚至都不需要,以找出哪些模块最昂贵。

然而,我已经对main((进行了"评论",并删除了除while(1(循环之外的所有内容。它仍然不适合128k Flash。尝试删除所有C++翻译单元,甚至使用gcc进行链接;但仍然有大约100k的".text"部分(考虑到应用程序没有任何作用,我现在可以使用10k(。

我使用的是arm none eabi gcc/g++5.4.1。链接器脚本由ST CubeMX生成。

gcc标志:-mcpu=cortex-m0 -mthumb -Os -s -Wall -Wa -a -ad -alms=build/$(notdir $(<:.c=.lst))

链接器标志:-mcpu=cortex-m0 -specs=nosys.specs -T$(LDSCRIPT) [some-libraries] -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections,--undefined=uxTopUsedPriority,-flto(也由CubeMX生成,-flto除外(

有人能解释为什么编译器/链接器没有从最终二进制文件中删除未使用的代码吗?是否有进一步调查的工具?

如果需要更多信息,请告诉我。

谢谢!

您需要将标志-ffunction-sections -fdata-sections传递给编译器(gcc/g++(,以便链接器中的--gc-sections工作,将标志-flto传递给编译器,以便链接程序中的-flto可以工作。