32位設(shè)備的隱藏問題
2021-03-08 23:11 作者:曉舟_ZhouSensor | 我要投稿
遇到相同問題的人:https://www.stmcu.org.cn/module/forum/thread-562364-1-1.html
今天在測試協(xié)議通訊的時候,出現(xiàn)了一個從來沒想過的問題……
你在觀察A和B的時候,A=B,但程序最終結(jié)果告訴你A≠B
一開始調(diào)試調(diào)的我很懵逼,因為無論用何種debug方法觀察A和B,兩個數(shù)值都是相等的,但程序無論如何都去執(zhí)行A不等于B的那一項。
在神仙群里剛發(fā)完求助,我就突然反應(yīng)過來,我是在32位的設(shè)備上進(jìn)行編程。我判斷的數(shù)是16位的,會不會程序把另外剩余16位進(jìn)行比較了……
寫了個(unsigned short)對著*(unsigned short*)再強(qiáng)制轉(zhuǎn)換了一次,果然這次程序執(zhí)行正確了。
這也是先前寫8位機(jī)的時候從沒遇過的現(xiàn)象,因為8位機(jī)對于16位數(shù)據(jù),是需要進(jìn)行兩次比較,一定不會有多余的內(nèi)容,所以一定不會出錯。
而32位機(jī)對16位數(shù)據(jù)只需要進(jìn)行一次比較,所以在寄存器內(nèi)會有另外多余的位數(shù)。
需要用強(qiáng)制轉(zhuǎn)換或者其他辦法,確保剩余的位數(shù)在預(yù)料范圍內(nèi),才能保證程序正確運(yùn)轉(zhuǎn)。
標(biāo)簽:
32位設(shè)備的隱藏問題的評論 (共 條)
