我已经在我的公寓中为加热系统编写了一个小型应用程序,在编译结束时,我将得到以下输出:

 'Invoking: Cross ARM GNU Print Size'
arm-none-eabi-size --format=berkeley "Phaethon_F446.elf"
text       data     bss     dec     hex filename
142935      924   77140  220999   35f47 Phaethon_F446.elf


我正在使用具有128 KB RAM的STM32F446RE,如果我是对的,则bss部分需要75KB RAM。这意味着超过50%的RAM已用尽。


我错了吗?
杀死bss我的RAM或从编译器表示该值错误?
我应该在软件中进行哪些更改?

最佳答案

是的,您是对的,根据该报告,.bss占用了约50%的RAM。可以肯定的是,您可以生成映射文件来查找变量的分配方式(或位置)(-Wl,-Map = output.map)。

关于解决方案,您必须优化软件(是否需要所有变量?是否正在将编译器优化用作-O3 / ... options?可以重用变量吗?)我对您的代码/算法一无所知/ etc,但仅对于加热系统而言,它看起来像很多字节。

链接脚本将向您显示.bss节的边框(即当前大小)(以及内存的分割方式),以防万一您要修改它(可以选择内存的分配方式)。

关于c - 我的BSS部分的大小是否重要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50856263/

10-13 08:12