CRC校驗(yàn)編程和硬件快速校驗(yàn)探討
2 嵌入式系統(tǒng)CRC校驗(yàn)的編程
如上所述,k+r位的被模除數(shù)采用右移的方法不斷地同反序的約定多項(xiàng)式對(duì)位模除,也就遵從了從高位向低位不斷減余的除法規(guī)則。但由于不必求模除的商,因此只要將被模除數(shù)不斷地右移位,與去掉最高位的反序約定多項(xiàng)式模減,求得余數(shù)即可。
但如果被模除數(shù)最低位右端的移出位是O,則無(wú)論從左端添進(jìn)多少個(gè)O,也不夠模除約定多項(xiàng)式(其隱含的最高位是1)。在此情況下該位的商是O,余數(shù)不變,不應(yīng)再同約定多項(xiàng)式對(duì)位模減,而要繼續(xù)左添O右移位,直到當(dāng)前余數(shù)(被模除數(shù))右移出的位值為1才夠模除(商1),才可將余數(shù)再對(duì)位模減一次多項(xiàng)式。由此看出,將約定多項(xiàng)式去掉最高位,可以使模減(異或)的計(jì)算位數(shù)r減少(一般r都正好是1字節(jié)位數(shù)的整數(shù)倍)。
由于被模除數(shù)是k+r位的,因此總共需要右移k位,即左添進(jìn)尼個(gè)O,才能模除到最低位結(jié)束。得到的余數(shù)最多是r位(約定多項(xiàng)式為r+1位),再將它異或人一個(gè)新數(shù)據(jù),作為新的被模除數(shù)。
每異或進(jìn)一個(gè)數(shù)據(jù),求新一輪CRC碼,都只進(jìn)行走(字節(jié)數(shù)據(jù)是一8)次的右移和一般都少于是次的模減(異或)運(yùn)算,而且模減的中間差值無(wú)需保留(后值覆蓋前值)。因此CRC碼生成的運(yùn)算過(guò)程,就是右移位、判斷移出位為1則同多項(xiàng)式模減(C語(yǔ)言不能對(duì)移出位檢測(cè),需將余數(shù)備份后同0xol相“與”)、差值回存后再右移的是次循環(huán)過(guò)程,如圖1所示。之后,再異或進(jìn)下一個(gè)數(shù)據(jù)(該步與查表法一致)。編程得當(dāng)?shù)脑掃\(yùn)算量很小。
筆者用51匯編語(yǔ)言編寫(xiě)(2R(:一8校驗(yàn)程序,算得1字節(jié)數(shù)據(jù)的CRC碼,只需64~80個(gè)機(jī)器周期,只多用1字節(jié)RAM單元(CR(:一16校驗(yàn)多用2字節(jié),時(shí)間加倍)來(lái)存儲(chǔ)余數(shù),即下一次的被模除數(shù)(不斷覆蓋上一次已無(wú)用的)。因此,完全可以直接運(yùn)算,而不必存儲(chǔ)大量的數(shù)據(jù)表格。C語(yǔ)言編程,要考慮語(yǔ)句代碼的優(yōu)化以及只定義使用int和char型局部變量,以免耗時(shí)和占用RAM單元太多。
接收方對(duì)于最后收到的r位CRC校驗(yàn)碼,不需要再納入模除而使最終余數(shù)為O,只需同信息數(shù)據(jù)的模除余數(shù)比較,相等則確定通信正確。這樣可以減少模除循環(huán)次數(shù),節(jié)省時(shí)間。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
分頻器相關(guān)文章:分頻器原理
評(píng)論