从来没有这么抠搜过。
准备用STC15F104W带fd650的中九屏最终做个遥控测码的。
模块化开发,多年的习惯让我看不了主main文件里一大堆东西。
显示做显示。
遥控解码做遥控解码。
基本都调试完成。
结果合成编译的时候怎么都不行了,空间不够用了。
STC15F104W只有4k空间,真的是赤贫啊。
单独编译仔细看,光显示就占了3k,再次仔细检查代码,发现这句
因为用到了指针,占了0.4k。
这句,因为用到了结构体转换,也占用了0.4k
经过一番折腾,换函数什么的,结果发现换了的函数也是一样。
看来还不是这个问题。
最后还是这样解决问题的。
在大数组定义前都加上 xdata。
屏蔽未用的函数。
死扣每个变量的定义,能最小显示的就最小显示。
对应一些经典算法,要好好理解。
比如经典的网上定时器的取法,取高8位和低8位,有的用的/256和%256,这种效率是比较低的,经典的还是位移
获得高8位,只用把这个数右移8位。
比如0xaabb右移8位,0xaabb>>8,就是0x00aa。
获取低8位,只用这个数与0x00ff按位相与。
比如0xaabb和0x00ff按位相与,0xaabb & 0x00ff,结果就是0x00bb。0x00ff,前8位是0,后8位是1,任意数与0相与为0,与1相与不变,于是就清零了前8位,保留了后8位,得到0xbb。
移位与按位与操作的速度要比取余和除法操作快很多,所以效率要高