您的位置 首页 FPGA

IAR MSP430 bug 风险的取反操作

芯片是msp430f247,编译器是iarformsp430V5.10,据说是最稳定的版本。今天却一下子发现好几个bug。。。。第一个bug:语句if((pa…

芯片是msp430f247,编译器是iar for msp430 V5.10,据说是最安稳的版别。

今天却一会儿发现好几个bug。。。。
第一个bug:
句子if ((packnum == UartA0Waitchar()) && (packnum ==(~UartA0Waitchar()) ) )被编译器直接编译没了,编译器认为这句话永久不会建立,而实践上UartA0Waitchar()是个串口取字符函数,每次取回来的成果都不是相同的,这个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,有下图能够作证。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/273079.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部