C(嵌入式):注释FreeRTOS的RootTask

我的FreeRTOS构造中有一个树形的流程/任务架构。 main()只需创建一个RootTask(在初始化HAL之后),然后再创建两个任务,依此类推。

我目前正在与flash大小(基本上是代码+常量?)战斗,因此禁用任务(=对它们进行注释),以便向编译器显示甚至不需要大多数翻译单元,从而找出需要哪些模块最贵。

但是,我已经对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除外)

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

请让我知道是否需要更多信息。

谢谢!

hzhz020261 回答:C(嵌入式):注释FreeRTOS的RootTask

您需要将标志-ffunction-sections -fdata-sections传递给编译器(gcc / g ++),以使链接器中的--gc-sections起作用,而将-flto传递给编译器,以使-flto在链接器中可以完成其工作。

本文链接:https://www.f2er.com/3067815.html

大家都在问