本来是写个IAP程序,Flash中只规划了4K字节,但是代码编写完后有6k,所以寻找优化方案,优化完在1.7k左右。
STM32 keil5编译优化,可以勾选一下几项:
1、Options for Taeget-->Target
勾选使用微库
2、Options for Taeget-->Target
①选择优化级别Level 3(-O3)
②勾选One ELF Section per Function
3、关于One ELF Section per Function的作用特别说明下:
①编译器在处理一个 c 文件的时候呢,如果这个选项不选,那么这个C文件中的所有函数在编译后只会产生一个叫 .text 的输出节:
AREA ||.text||, CODE, READONLY, ALIGN=2
如果选了呢,那么每个函数将会产生一个输出节,如果你用C写了一个叫PRTL_HeadGet()的函数,那么编译器将会产生一个叫 i.PRTL_HeadGet 的输出节,具体如下:
AREA ||i.PRTL_HeadGet||, CODE, READONLY, ALIGN=2
PRTL_HeadGet PROC
勾选后,编译器产生的输出节,粒度小多了,便于找到没有使用的函数,将它从最后输出文件中删除。这样,你最后产生的可执行文件大小将会变小。
②代码大小对比:
没勾选:Program Size: Code=4152 RO-data=216 RW-data=36 ZI-data=6148
勾选后:Program Size: Code=1376 RO-data=200 RW-data=0 ZI-data=6144
③map文件对比:
工程右击open map file.
没勾选:
Removing Unused input sections from the image.该部分内容是去除项目中没有使用的函数。没勾选前是按照文件优化的。
====================================================