当前位置:  开发笔记 > 编程语言 > 正文

C(嵌入):在评论FreeRTOS的RootTask时,代码大小不会缩小

如何解决《C(嵌入):在评论FreeRTOS的RootTask时,代码大小不会缩小》经验,为你挑选了1个好方法。

我的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除外)

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

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

谢谢!



1> Erlkoenig..:

You need to pass the flags -ffunction-sections -fdata-sections to the compiler (gcc/g++) such that --gc-sections in the linker works, and -flto to the compiler such that -flto in the linker can do its work.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有