PICC编译器问题

2020-02-09 11:46发布

各位好!今天用了一下PIC单片机写了个C程序出现了一些奇怪的现象,请高手讲解,谢谢!

我要显示的是个位数字,money_count和dis_money_symbol是全局变量,display_table 定义为
const unsigned char display_table[10]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
我在查表的时候这样写
dis_money_symbol=display_table[money_count%10];
运行这个语句后程序尽然跑到其它地方去了,跑到一个其它函数里面。但我定义一个局部变量temp,temp=money_count%10;
这样就OK了,不知道是何原因,按照C语法,money_count%10也会赋值给一个局部变量呀!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
portx
1楼-- · 2020-02-09 14:28
看一下你定义的money_count变量是否满足money_count%10时所占用的空间,如果money_count定义的为uchar形式的极容易出问题,因为在运算的时候%10占用的是一个int变量单位,可能你的money_count变量溢出了导致的错误
还有在调用const变量内容时尽量不要在此类数组内部做嵌套调用,PIC的嵌套深度有限建议使用局部变量先进行定值运算后再调用const数组
NewNew
2楼-- · 2020-02-09 15:48
 精彩回答 2  元偷偷看……
portx
3楼-- · 2020-02-09 21:29
%10的意思是除以十进制10并取余数,编译器在处理整数除法运算的时候多数会使用先左移位5次,即乘以10然后进行除法运算,当你的char变量左移5次的时候会导致char的溢出,所以会丢失高位数据导致运算结果不正常
eduhf_123
4楼-- · 2020-02-09 21:39
LS乱讲误导人……
左移5次等效于乘10???


LZ自己把编译器生成的.LST文件打开,看看对应语句的汇编代码不就知道是怎么回事了。
NewNew
5楼-- · 2020-02-10 01:32
谢谢讲解!

一周热门 更多>