页次: 1
提一点,GCC的rw段在binary里是不压缩的,启动时做全量拷贝。Keil的话,无论compiler V5还是V6,都会压缩rw段,__main函数里会调__decompress做解压,IAR/Segger/Green Hill/Ti的工具链也会做类似优化。考虑到多数全局变量只需要做部分初始化(比如一个大描述符中的个别初始化字段),rw段里是有非常多的zeros可以被优化掉的。如果固件里的rw segment size不小,工具链不做压缩带来的size overhead会非常多。楼主可以在AC5/AC6的link flag里添加 --datacompressor off 再和GCC固件比对下体积。
我做过调研,根据rw段的实际使用情况,仅使用zero-rle压缩就可以做到7%~20%的压缩比。
也就是说,假设rw segment有10K,做rw压缩可以减少固件7~9K的size。对mcu firmware来说,这个收益是相当可观的。
GCC Toolchain没有集成rw压缩功能,但是可以插postbuild流程,结合重写的startup load code手动实现。
页次: 1