嵌入式微控制器上的CRC計算和校驗程式1

2022-09-21 12:42:13 字數 1229 閱讀 5430

注意:此程式計算出的crc值,和電腦版crc計算工具計算出的值不一樣。

c程式如下:

//

! crc16_ibm standard, polygon code 0x8005

const uint16 crc_tab16 =;

//! crc32_common standard, polygon code 0x04c11db7

const uint32 crc_tab32 =;

const uint16 crc_init = 0x3aa3;/*

****************** crc calculationns ********************

*/uint16 crc16update(uint16 crc, uint8 ch)

uint32 crc32update(uint32 crc, uint8 ch)

uint16 crc16calc(

const uint8*pmsg, uint32 nlen)

return

wcrc;

}uint32 crc32calc(

const uint8*pmsg, uint32 nlen)

return

wcrc;

}

只需要了解 crc16calc 和 crc32calc 函式的使用即可, 這兩個函式的用法相同。以 crc16calc 舉例,例如有陣列a[20] = , 若要計算這10個數的crc16的值,則呼叫crc16calc((uint8*)a, 10);的返回值0xe48f就是其crc16的值,將crc16的值填到資料末尾(小端儲存)後成為a[20] = ,  然後再計算這12個數的crc16的值將會是0。

所以 crc16calc的用法是:

1. 傳送端呼叫crc16calc((uint8*)a, n) ; 計算出要傳送n個位元組的資料a的crc16的值, 然後以小端儲存方式追加到n個資料的末尾

2. 接收端將接收到n+2個位元組資料,呼叫crc16calc((uint8*)a, n+2);返回值是0說明校驗成功。

所以 crc32calc的用法是:

1. 傳送端呼叫crc32calc((uint8*)a, n) ; 計算出要傳送n個位元組的資料a的crc32的值, 然後以小端儲存方式追加到n個資料的末尾

2. 接收端將接收到n+4個位元組資料,呼叫crc32calc((uint8*)a, n+4);返回值是0說明校驗成功。

微控制器和嵌入式的概念 入門嵌入式必備

如果之前知道微控制器和嵌入式的話,那麼對於這兩者還是有點基礎的,如果不知道的話,那麼難免對他們有些誤解,很多人甚至還覺得這可能是一種,只是名字不一樣而已,下面快點來了解下微控制器和嵌入式的概念吧。微控制器和嵌入式的概念 一 什麼是微控制器?首先明確概念,什麼是微控制器,微控制器是一種積體電路晶元,是...

微控制器,ARM,FPGA和嵌入式的特點

簡單的說,嵌入式是嵌入式系統的簡稱,所謂嵌入式系統是指嵌入到應用物件中的專用計算機系統。這裡的物件就是指產品,比如日常使用的冰箱 空調 洗衣機,或者手機 遊戲機等。這些產品中都有計算機系統,這類計算機系統就是嵌入式計算機系統。至於微控制器 arm fpga dsp等都是實現嵌入式系統的硬體平台。根據...

從微控制器到嵌入式

1 什麼是微控制器?微控制器是乙個控制系統,接收管腳中斷輸入,進行一些簡單的邏輯操作,對記憶體或flash進行訪問,再輸出到管腳 2 什麼是嵌入式?嵌入式有linux核心 linux核心功能有 程序管理 記憶體管理 檔案系統管理 裝置驅動 網路管理 3 微控制器和嵌入式有什麼共同點?都是靠中斷驅動,...