我随便写了一小段C代码,PRO9.60PL5比STD9.60PL2省了8个代码空间,一个寄存器占用
一开始挺高兴,但仔细查了list文件后发现实际上STD9.60PL2比PRO9.60PL5的代码优化效果要好,
只是函数调用上PRO9.60PL5用了call,而STD9.60PL2占用了寄存器保存入口号直接用goto跳来跳去,
如果当函数多级调用时,(极端些,比如PIC16F57/54),显然call是不行的,
pro版的所谓的智能感知优化可能是查觉堆栈没问题,就用了call
-------------------------------------------------------------------
但是某些语句,pro比std却要浪费了代码
比如
switch(n)
{
case 0:PORTB=0;break;
case 1:PORTB=1;break;
case 2:PORTB=2;break;
case 3:PORTB=3;break;
case 4:PORTB=4;break;
case 5:PORTB=5;break;
case 6:PORTB=6;break;
case 7:PORTB=7;break;
}
std版编译出来有如下代码
(变量名等我用了字母,实际lst文件中很多是数字,看的烦,有些类似1^0也是我自己加上的^0,比数字方便理解)
MOVF n,W
BTFSC STATUS,Z
GOTO L12
XORLW 1^0
BTFSC STATUS,Z
GOTO L13
XORLW 2^1
BTFSC STATUS,Z
GOTO L14
....
而pro版编译出来多了一条废语句,如下
MOVF n,W
XORLW 0 ;这条是废的
BTFSC STATUS,Z
GOTO L12
XORLW 1^0
BTFSC STATUS,Z
GOTO L13
XORLW 2^1
BTFSC STATUS,Z
GOTO L14
....
=============================
同样,还有其它一些语句也会多些类似的废语句,比如
if((u8)(a-b)>=2)
{
a = 5;
}
具体我就不写了
-------------------------------------------------------
所以表面上看来pro的代码和寄存器占用要比std少,
但是通过其它一些手段换来了,而不是纯粹的语句优化,
相比之下std的语句优化要好一些...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>