精簡:提前位移,更好!
其實再簡化的步驟,就只是將向右位移的步驟提前至第二步驟,當計算值經XOR運算後為"0"時,位移值既為最終值,若為"1"時,直接與"10001100"進行XOR的運算既可。說起來,向右位移的步驟往前,好像也沒什麼,但各位若細細品味,應可體會它對於程式的程序的精簡有不可小看的功效。
CRC-8的概念及程式碼
底下是概念圖及程式碼的整合,上面所說的精簡部份,可參考上一篇"[DS18B20-認識CRC(2)]"的概念圖,必須依初值X="1/0"的狀態與"0x80"與"0x18"進行XOR運算,而精簡後,則只要當初值X為"1"時,與"10001100"(0x8C)進行XOR運算既可,這樣對於程式設計的程序達到了極佳的精簡。下一步,完整的程式碼!
當初在摸索CRC時,一開始也看不懂,先看CRC數學運算說明,有看沒有懂。再去看程式碼(如上圖),還是看不懂!後來,乾脆就用最笨的方法,進入位元值的角度,用填空格及移位的方式來摸索,這樣才漸漸懂得如何而來,再回頭看數學運算及程式碼,就懂了!CRC用了三篇來說明,一是因為它扮演著單線數位傳輸的要角,必須懂。二是三篇的過程來說明,是詳細的呈現,我是用何種方法來學習CRC,這是我的「格物」之道!僅供參考!
常見CRC的處理方式還有使用查表法的方式,優點是速度快,但會佔較多的程式碼空間,但其基本仍是依上圖所示!
至此,我們算是完成了CRC的認識及關鍵程式碼的演化程序!
下一步,將並利用它來作參數的調整!
沒有留言:
張貼留言