[PICC]PRO 9.60 PL5 与 STD 9.60 PL2的一些使用比较

2020-02-09 11:34发布

我随便写了一小段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的语句优化要好一些...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
hermes
1楼-- · 2020-02-09 13:54
楼主真是仔细!我们要是都这样就好了!
phone
2楼-- · 2020-02-09 14:19
我也发现std版比pro好,8.05比9.60好用,除非8.05不支持的型号。
wangqh1983
3楼-- · 2020-02-09 14:53
回复【楼主位】snoopyzz
-----------------------------------------------------------------------

能否把PRO 9.60 PL5 上传一下!

一周热门 更多>