32位设备的隐藏问题
2021-03-08 23:11 作者:晓舟_ZhouSensor | 我要投稿
遇到相同问题的人:https://www.stmcu.org.cn/module/forum/thread-562364-1-1.html
今天在测试协议通讯的时候,出现了一个从来没想过的问题……
你在观察A和B的时候,A=B,但程序最终结果告诉你A≠B
一开始调试调的我很懵逼,因为无论用何种debug方法观察A和B,两个数值都是相等的,但程序无论如何都去执行A不等于B的那一项。
在神仙群里刚发完求助,我就突然反应过来,我是在32位的设备上进行编程。我判断的数是16位的,会不会程序把另外剩余16位进行比较了……
写了个(unsigned short)对着*(unsigned short*)再强制转换了一次,果然这次程序执行正确了。
这也是先前写8位机的时候从没遇过的现象,因为8位机对于16位数据,是需要进行两次比较,一定不会有多余的内容,所以一定不会出错。
而32位机对16位数据只需要进行一次比较,所以在寄存器内会有另外多余的位数。
需要用强制转换或者其他办法,确保剩余的位数在预料范围内,才能保证程序正确运转。