看看程序中的函数是不是太多了,最好进行一些优化,把同功能的函数,尽量写成一个,通过参数来选择功能
还有不用的变量,不要使用大量全局变量。
编译器的优化等级调高一些,最高的是-O3的
再不行,就只能换芯片了,换成高容量的芯片
1、提高优化等级
2、使用LL库或者标准库,HAL库的代码确实很大,我的项目上就遇到过,使用HAL库,HEX大小在21K,我改成了LL库,最终程序只有11K左右
3、更换芯片,一般ST都有相同封装和管脚兼容的大容量芯片
1.stm32同一级别的芯片据说实际容量都是最大的只是remark到了小的多出来的那部分可以试试用那部分不保证质量但就用下来情况还算正常
不过做产品不建议这样做
2.换更大容量芯片
3.优化逻辑经简代码裁剪功能是代码两减小.
这要看情况来处理:
1. 如果代码已经是优化好的,只有看是否能更换容量更大、管脚兼容的芯片,或者看是否能使用外部存储(内存)
2. 如果代码还可以优化,则先优化,优化的一般策略有:
2.1 裁剪功能
2.2 在保证效果的同时减少计算复杂度、减少数据精度
2.3 部分或者全部使用精简库(也可能是HAL转LL库)
2.4 采用汇编开发,实施人工优化
1、看看硬件上能不能更换内存更大的芯片
2、更换最新的编译器,或提高编译优化等级,让代码数更小
3、将程序进行优化,一般是RAM不足的情况多,这时需要将常量数据放入ROM
这种情况可以换容量大一点的芯片的特别是做产品的时候,
不过stm32有一个bug,就是他的同一系列产品用的都是同一个晶圆,比如stm32f101的晶圆就是stm32f103的,两者相同的,晶圆上的容量都是按照最大设计的,只不过在封装的时候写入不同id,屏蔽一部分rom,你可以把工程文件改成当前芯片的最大容量型号试试,然后编译后用jlink下载试试看,stlink会判断id所以无法使用
自己优化代码结构,尽量让代码可以重用,就可以减少源代码行数
或者编译器优化也行,这个可以减少编译出来的程序大小。
两种方法都可以
这种情况如果代码编译后相差不多的可以适当提高一下编译优化等级
如果不行就使用外挂大容量的内存
也可以换更大容量的相同型号的单片机
比如f103的64k换128k这样就能解决了
一个是增加优化等级,把不必要的程序优化掉,
一个是自己优化,把没有必要的变量与函数删除
一个是换更大Flash的,但是同型号的单片机
提高编译器优化等级,自己优化代码。减少全局变量。
如果使用了HAL库,换成LL和标准库。
还不行,就换芯片吧。
首先那些编译器是可以设置优化的,将优化等级调到03试一下,一般从O0调到O3,可以减少差不多20%的体积
其次,可以试一下,将部分比较容易实现的代码从库函数改为寄存器操作,也可以节省一部分代码空间。尤其是HAL库的
最后就是功能上面的裁剪了,不用的功能就关掉
不要自己优化代码,删除不使用的代码,或是使用编译器的自己的优化功能,可以减小不少的代码量
如果还不够,就只能是换Flash更大的芯片了