搜索
bottom↓
回复: 4

iar for msp430的bug?

[复制链接]

出0入0汤圆

发表于 2012-1-5 20:54:11 | 显示全部楼层 |阅读模式
大家帮我看看,我提到的问题是bug,还是说我自己理解错误,谢谢。
芯片是msp430f247,编译器是iar for msp430 V5.10,据说是最稳定的版本。

第一个bug:
语句椀昀 ((packnum == UartA0Waitchar()) && (packnum ==(~UartA0Waitchar()) ) )被编译器直接编译没了,编译器认为这句话永远不会成立,而实际上唀愀爀琀A0Waitchar()是个串口取字符函数,每次取回来的结果都不是一样的,这个if完全有可能成立。刚开始认为只要将编译器的优化取消即可,可是在将option->c/c++ compile ->Optimizations->level的值改为none后,if语句仍旧没了。。。。

第二个bug:
騀义了packnum/rcvpacknum1/rcvpacknum2三个变量,都是unsigned char类型的。在实际执行过程中,可以查看到packnum存储于R6中,值为0x0001,rcvpacknum1存储于R7中,值为0x0001,rcvpacknum2存储于R8中,值为0x00FE。
1.语句packnum == rcvpacknum1,等式成立;
2.语句packnum == ~rcvpacknum2,等式不成立;
3.语句packnum == (unsigned char) ~rcvpacknum2,等式成立;
等式2之所以不成立,是以为0x00fe取反后位0xff01,所以和packnum不相等。问题出现了,我在定义这3个变量的时候,已经明确声明了变量类型为unsigned char,为什么在实际比较的时候去比较16bit的宽度呢!!!!
对于第二个bug,添加一个图片证据吧,如下:

(原文件名:2012-1-5 21-26-31.jpg)

程序箭头停在红色的地方,说明确实不相等了。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-1-29 11:01:49 | 显示全部楼层
第二个不是bug

出0入0汤圆

发表于 2012-1-29 11:09:43 | 显示全部楼层
还是得看看IAR for 430 的help,这里面有太多的东东没法编译啦。

出0入0汤圆

发表于 2012-1-31 10:16:39 | 显示全部楼层
v5.10是最稳的版本么?

出0入0汤圆

发表于 2012-2-7 15:21:46 | 显示全部楼层
这不是BUG。
楼主你没有理解标准C。

按C标准规定
1.char,unsigned char,signed char本质上没有算术和逻辑运算,char,unsigned char,signed char参与运算之前要提升到int(或者unsigned int)才能参与运算。

2.~运算操作符号要有操作数必须至少是int. unsigned char根本没有~运算。

假设int是16位。

~((unsigned char)0xff)的结果是 (int)0xff00  (即16进制值为0xff00,类型是int)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 10:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表