原创 关于符号扩展

2007-9-12 23:50 2224 7 7 分类: 汽车电子

今天调试ARM程序时遇到一个符号扩展的问题。在使用语句IO0SET = IO0SET | ( (data) * FlashStartNum)(其中data8位整型,FlashStartNum是一个常量)时,程序运行有问题。程序的目的就是只操作32位口线的某几位而不影响其他位。用在原来的PCB板上就没问题,用新做的PCB就有问题。经过排查,发现了问题所在。原来的PCB只使用了端口的低位,高位部分根本没有。而现在的板子则用了所有的端口。这样的话,就有问题了。虽然datauint8类型,但是由于ARM32 位的,data取反后就会进行符号扩展。如data0xff,取反后data0xffffff00,后果可想而知。改成IO0CLR = IO0CLR | ((uint8)(~data) * FlashStartNum)后即可解决问题。

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条