开发环境用的是IAR
1. 提高优化级别 工程选项-》C/C++ compiler->optimizations
2. 如果使用了ST的驱动库,找到USE_FULL_ASSERT,屏蔽掉,大约节省1.5K的代码空间
3.简化代码,这个只能对着代码一段一段去抠了,有点痛苦,不得已而为之
这个……仿佛是两码事呀!提高优化级别应该在后期干的事,否则debug会很蛋痛的!
提高优化级别之后你会发现有的bug很难找也很奇怪。的对着反汇编的指令找问题。建议把printf函数的功能去掉,这个占用的空间不小。
printf默认是不支持的吧?好像加了stdio.h了空间会占用比较多
.......不是的,每个编译器都会有一个选项,这个选项的作用是不将没用到的函数编译到最终的bin文件中。添加stdio头文件但是不用里面的函数是不占用空间的。重写了fputc函数,或者自己使用sprintf函数写一个printf函数就能使用printf,但是占用空间的是sprintf函数,占用得很多
感谢分享,禁止断言使能后有屏蔽掉printf函数readonly code 足足少了3196byte
我刚遇到的,C/C++ compiler->optimizations开到High(size),485通讯老是出错(50%到70%的丢包率),查了一天多,发现Modbus每次都多收数据,debug的时候由于优化太高很多地方不执行,蛋疼啊 !为了能一步步仿真,调到low之后,还没查呢,全好了。几万条数据,没一个丢包的,你敢信!!!到现在还不找为啥呢!!!关闭USE_FULL_ASSERT确实省很多空间!这是有断言的:6 709 bytes of readonly code memory, 1 277 bytes of readonly data memory, 716 bytes of readwrite data memory。这是屏蔽断言的: 5 171 bytes of readonly code memory, 682 bytes of readonly data memory, 716 bytes of readwrite data memory,真的省了好多!!
期间还怀疑硬件的问题,各种接线,各种电阻,换换换。。。。。。,结果不是硬件的问题!要我说,选这种容量和性能刚刚满足自己需求的单片机,纯粹是为难自己!!余量很重要啊。