[原创] 解决STM8代码空间不足的几个办法

gglong77   2016-9-22 14:40 楼主
开发环境用的是IAR
1. 提高优化级别  工程选项-》C/C++ compiler->optimizations
2. 如果使用了ST的驱动库,找到USE_FULL_ASSERT,屏蔽掉,大约节省1.5K的代码空间
3.简化代码,这个只能对着代码一段一段去抠了,有点痛苦,不得已而为之
  • QQ图片20160922144020.png

回复评论 (10)

这个……仿佛是两码事呀!提高优化级别应该在后期干的事,否则debug会很蛋痛的!
点赞  2016-9-22 14:46
提高优化级别之后你会发现有的bug很难找也很奇怪。的对着反汇编的指令找问题。建议把printf函数的功能去掉,这个占用的空间不小。
亚里士缺德
点赞  2016-9-22 14:58
引用: strong161 发表于 2016-9-22 14:46
这个……仿佛是两码事呀!提高优化级别应该在后期干的事,否则debug会很蛋痛的!

空间不足本来就是后期才会出现的事啊
点赞  2016-9-23 08:12
引用: 汤权 发表于 2016-9-22 14:58
提高优化级别之后你会发现有的bug很难找也很奇怪。的对着反汇编的指令找问题。建议把printf函数的功能去掉 ...

printf默认是不支持的吧?好像加了stdio.h了空间会占用比较多
点赞  2016-9-23 08:15
.......不是的,每个编译器都会有一个选项,这个选项的作用是不将没用到的函数编译到最终的bin文件中。添加stdio头文件但是不用里面的函数是不占用空间的。重写了fputc函数,或者自己使用sprintf函数写一个printf函数就能使用printf,但是占用空间的是sprintf函数,占用得很多
亚里士缺德
点赞  2016-9-23 09:00
感谢分享!
点赞  2016-9-25 23:26
感谢分享,禁止断言使能后有屏蔽掉printf函数readonly code 足足少了3196byte
点赞  2016-12-2 19:31
学习了 ,printf占这么多内存。
点赞  2016-12-3 13:35
我刚遇到的,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,真的省了好多!!
点赞  2016-12-11 22:26
期间还怀疑硬件的问题,各种接线,各种电阻,换换换。。。。。。,结果不是硬件的问题!要我说,选这种容量和性能刚刚满足自己需求的单片机,纯粹是为难自己!!余量很重要啊。
点赞  2016-12-11 22:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复