打印
[PIC®/AVR®/dsPIC®产品]

请教个关于PICC PRO级优化后程序出错的问题。

[复制链接]
1658|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhongrt|  楼主 | 2021-10-28 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2021-11-1 09:45 编辑

事情大概是这样的:有个新项目,涉及到OLED显示、串口接收数据及两路IIC通信等。刚开始为了能快速调通程序,选择了算是比较熟悉的PIC16F877A芯片,8K的程序空间,MPLAB X+PICC语言编写程序。
OLED根据串口接收的信息显示10个数字或26个字母中的特定每几个,涉及到8*8和16*16两种大小,查表的方式,数据表共占用了接近1K(1024)的空间。程序里大部分都是简单而复杂的运算以及两路IIC的控制。
刚开始程序运行一切都很正常,随着代码量越来越多,后来发现程序还没写完,空间就不够了,删掉部分程序后,查看程序空间也确实用到了98%。
以前知道PICC有优化级别一说,然后网上找了个大家都懂的PICC软件,然后优化级别调到PRO级,编译后程序空间确实缩小了40%,但是程序烧写进去后工作异常了:最直观的是按键乱跳了,串口接收数据异常了。为此我特意写了个简单的串口程序来测试: for(i=0x21;i<0x7f;i++){
     TXREG=i++;
      while(!TXIF);
     TXIF=0;
     TXREG=i;
      while(!TXIF);
     TXIF=0;
     TXREG='\r';
      while(!TXIF);
     TXIF=0;
     TXREG='\n';
      while(!TXIF);
     TXIF=0;
  }
发送一次ASCII表,电脑上用串口助手观察数据。
结果PICC用LITE级优化时工作正常,用PRO级优化时总是丢失偶次发送的数据:!
#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}  
例如:数字部分就把02468给丢了。
跟码率无关,晶振是码率的整数倍,误码率为0,开始波特率是115200,降到14400也试过,结果一样。-----------------------------------------------------------------------------------------------------------------------
我特意对比了生产的HEX反汇编的结果,PRO级优化后程序也正常,而且也更接近按汇编思路写的程序。
但程序就是工作不正常。这是为什么?有哪位前辈遇到过类似的情况,大概是怎么解决的?谢谢!

使用特权

评论回复
沙发
zhongrt|  楼主 | 2021-10-29 09:15 | 只看该作者
都没人碰到过类似的问题吗?

使用特权

评论回复
板凳
pzsh| | 2021-11-1 09:45 | 只看该作者
PICC是很早期的编译器吧,现在官网上没有了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

42

帖子

2

粉丝