日志档案

发表于 2007-9-12 23:50:52

0

标签: 无标签

关于符号扩展

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

系统分类: 汽车电子   |   用户分类: 嵌入式软件   |   来源: 原创   |   【推荐给朋友】

    阅读(576)    回复(0)  

投一票您将和博主都有获奖机会!