本帖最后由 woody_chen 于 2020-8-10 10:32 编辑
众所周知,有些变量是不需要初始化的。
最近想优化下芯片启动的速度。所以想把某些很大的buffer从bss段,放到新建的一个no_init段。这样芯片启动的时候就不需要把这个buffer清0
第一步,在link文件中新建了一个no_init段。这里放在bss段后面。
- .bss :
- {
- . = (((. + 3) / 4)*4);
- PROVIDE(_start_bss_ = .);
- *(.sbss)
- *(.sbss.*)
- *(.bss)
- *(.bss.*)
- }
- PROVIDE(_end_bss_ = .);
-
- .no_init :
- {
- . = (((. + 3) / 4)*4);
- *(.no_init)
- *(.no_init.*)
- }
第二步, 把不需要初始化的变量放到这个段。
- GLO_SHARE_MEM g_wMic __attribute__((section(".no_init")));
代码能编译通过,也能跑起来。但是bin文件大了很多。改之前是80KB左右,改之后一下变成100KB. 打开bin文件发现bin文件最后有将近20KB的0.
看了list文件也没找到这些0是什么东西。向大神求救。
补充:编译器是GCC
|