我为我公寓的供暖系统编写了一个小应用程序,在编译结束时我将得到以下输出:
'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 消失了。
- 我错了吗?
杀死我的 RAM 或者编译器表示的这个值是错误的?
我应该对软件进行哪些更改?
最佳答案
是的,你是对的,根据报告,大约 50% 的 RAM 被 .bss 占用。可以肯定的是,您可以生成映射文件来找出变量的分配方式(或位置)(-Wl,-Map=output.map)。
关于解决方案,您必须优化软件(是否需要所有变量?您是否使用编译器优化作为 -O3/... options ?您可以重复使用变量吗?)我不知道您的代码/算法/等,但看起来仅仅用于加热系统就需要很多字节。
链接器脚本将向您显示 .bss 部分的边框(即当前大小)(以及您的内存如何分割),以防万一您想要修改它(您可以选择内存的分配方式) )。
关于c - 我的 BSS 部分的大小是否达到临界值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856263/