求助:PIC16F7x与PIC16F72x的PICC编译大小问题。

2020-02-09 11:41发布

之前用PIC16F72,后要用串口。就采用了PIC16F722。后来某些原因,没使用串口,但722买了,还得用。

使用PICCpro9.65编译的程序,正常通过。某天无意将MPLAB选择设备为PIC16F72,重编译了一下,天啊。少了120个WORD(总共才1400WORD)。奇怪了,722与72空间不都一样吗?怎会这么大差别。对比汇编发现,编译722将很多变量整到BANK1了,在很多操作上都要进行BANK切换。而编译72则编译在BANK0上,就少了120WORD。

郁闷,72与722空间一样,怎么编译差这么多呢?望高人指点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
yujie
1楼-- · 2020-02-09 15:23
经多次调整发现,原程序中使用了一个函数指针,可能是编译16F722时编译器支持的问题。将这个函数指针取消直接调用函数即恢复了与16F72一样的大小使用率。看来PICC对某些器件函数指针的优化还是有些问题的。

今天又试了下PICC9.70,结果一编译一堆错误。怪了9.65没任何问题的,9.70却编译不过。再找,发现9.70对语法要求相当严格。最后再改,但还是提示无法查找到空间。看来9.70还是有些问题待解决,建议还是先用9.65吧。

这里给大家个建议(可能我是菜鸟,之前没注意罢了),在类似这样的语句中,if (x >= (y - 10)) fun(); 使用PICC编译时,最后加上类型限定,改成 if (x >= (unsigned char)(y - 10)) fun(); 这样编译出来可少10来个WORD。注,x,y本身已是unsigned char类型的,之前使用其它C语言时,根本不用强制类型的。

一周热门 更多>