精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【C語言應用】使用查表法計算CRC8

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-08-31 12:54 ? 次閱讀

筆者曾經在一個項目中,有一個數據協議對接需要用到簡單的CRC8校驗。當初我們實現的方法是使用查表法,現將實現代碼分享下。

//CRC8查表法  
static uint8_t R_CRCTABLE[] =  //reversed, 8-bit, poly=0x07 
{ 
    0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 
    0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B, 
    0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 
    0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67, 
    0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 
    0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43, 
    0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 
    0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F, 
    0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 
    0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B, 
    0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 
    0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17, 
    0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 
    0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33, 
    0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 
    0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F, 
    0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 
    0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B, 
    0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 
    0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87, 
    0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 
    0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3, 
    0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 
    0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF, 
    0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 
    0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB, 
    0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 
    0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7, 
    0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 
    0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3, 
    0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 
    0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF,
};

/**
 * copy from java code, warning "unsigned char" and "char"
 * 計算input的CRC
 * @param input
 * @return 返回CRC值
 */
uint8_t get_crc8(const void *Buf, uint32_t Len)
{
    uint8_t *input = (uint8_t*)Buf;
    uint8_t fcs = (uint8_t)0xFF;
    int32_t i;
    for (i = 0; i < (int32_t)Len; i++)
        fcs = R_CRCTABLE[fcs ^ (uint8_t)input[i]];

    return (uint8_t) (0xFF - fcs);
}

該段代碼是成熟的代碼,不過值得注意的是,像這種需要兩邊對等校驗數據的通訊,在代碼實現時,最好兩邊都使用相同實現的校驗代碼,保證不會因為校驗算法的實現不同,而出現相同報文卻計算出不同校驗值的情況。

在使用場景上,CRC8一般用于對數據校驗不是那么嚴格的場景,畢竟單用1個字節做校驗,很多時候可能會產生誤判。所以,如果對數據校驗要求更高時,需要使用其他更高級的數據校驗方法。


延伸閱讀:

C語言】使用余式表的方式計算CRC16


架構師李肯

架構師李肯全網同名),一個專注于嵌入式IoT領域的架構師。有著近10年的嵌入式一線開發經驗,深耕IoT領域多年,熟知IoT領域的業務發展,深度掌握IoT領域的相關技術棧,包括但不限于主流RTOS內核的實現及其移植、硬件驅動移植開發、網絡通訊協議開發、編譯構建原理及其實現、底層匯編及編譯原理、編譯優化及代碼重構、主流IoT云平臺的對接、嵌入式IoT系統的架構設計等等。擁有多項IoT領域的發明專利,熱衷于技術分享,有多年撰寫技術博客的經驗積累,連續多月獲得RT-Thread官方技術社區原創技術博文優秀獎,榮獲CSDN博客專家、CSDN物聯網領域優質創作者、2021年度CSDN&RT-Thread技術社區之星、2022年RT-Thread全球技術大會講師、RT-Thread官方嵌入式開源社區認證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯網架構設計師)等榮譽。堅信【知識改變命運,技術改變世界】!


歡迎關注我的gitee倉庫01workstation ,日常分享一些開發筆記和項目實戰,歡迎指正問題。

同時也非常歡迎關注我的CSDN主頁和專欄:

【CSDN主頁-架構師李肯】

【RT-Thread主頁-架構師李肯】

【C/C++語言編程專欄】

【GCC專欄】

信息安全專欄】

【RT-Thread開發筆記】

freeRTOS開發筆記】

有問題的話,可以跟我討論,知無不答,謝謝大家。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7599

    瀏覽量

    136213
  • 代碼
    +關注

    關注

    30

    文章

    4751

    瀏覽量

    68357
  • CRC8
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6160
收藏 人收藏

    評論

    相關推薦

    TAS5805內部的硬件CRC8對應標準的哪種? CRC校驗的數據是offset和value值嗎?

    TAS5805 內部的硬件 CRC8 對應標準的哪種? CRC 校驗的數據是 offset 和 value 值嗎?用 PPC 加載文件計算出來的值和在線CRC
    發表于 10-12 06:19

    基于查表的快速CRC算法設計

    基于查表的快速CRC算法設計
    發表于 08-20 20:01

    Labview編寫的CRC8校驗程序

    用Labview編寫的CRC8校驗程序,輸入碼字序列后生成校驗碼,通過閱讀此程序,用戶可采用類似方式編寫CRC16,CRC32的程序。
    發表于 10-22 21:13

    LabVIEW串口通信時,用CRC8校驗該怎么寫

    串口通信時,用CRC8校驗,跪求該種怎么寫例如FF 0A 02 00 07 3F它的CRC8校驗碼為7D
    發表于 05-05 14:25

    CRC16和CRC8校驗計算,已經驗證算法正確

    本帖最后由 幸福牛寶兒 于 2016-10-31 14:33 編輯 用Labview2014做的CRC16和CRC8計算,已經驗證,計算結果正確。
    發表于 10-28 12:02

    個人總結的C語言環境下的集中查表的方法

    個人總結的C語言環境下的集中查表的方法。void free_test(int input){int output; //單片機查表 //第
    發表于 11-26 08:24

    CRYPTO中的CRC16計算結果有問題怎么解決

    cubeMX只啟用CRC功能,其余默認配置,編譯沒有任何問題。調用參考官方例程,CRC32的計算結果沒問題,嘗試CRC16、CRC8,
    發表于 08-18 09:43

    有沒有人可以幫助我正確的用python實現CRC8

    我對嵌入式編程很陌生。我必須用 HAL 實現 CRC8,并嘗試在另一端用 python 實現 CRC8。使用了 crc8 庫,但兩個結果不匹配。有沒有人可以幫助我正確實施它?
    發表于 12-08 06:14

    如何將CRC配置為ITU-T CRC8呢?

    在 SUBGHZ 通用包 FSK 中,如何將 CRC 配置為 ITU-T CRC8:X8+X2+X+1我找到的唯一信息是在 Semtech SX1261/2 的數據表中,它只是關于 IBM C
    發表于 12-09 08:39

    Datasheet中BE13(SC900719) 的CRC8非常模糊怎么處理?。?/a>

    Datasheet 中BE13(SC900719) 的 CRC8非常模糊。我試過很多次但都失敗了。 你能告訴我更多嗎? 給我一個正確的例子。
    發表于 04-25 09:09

    CRC算法原理及C語言實現

    CRC算法原理及C語言實現:本文從理論上推導出CRC 算法實現原理,給出三種分別適應不同計算機或微控制器硬件環境的
    發表于 09-23 23:38 ?31次下載

    CRC(查表)-表的由來

    利用查表實現CRC算法,CRC算法廣泛應用與各行業,查表實現
    發表于 01-06 11:29 ?15次下載

    labview的CRC8校驗的詳細資料免費下載

    該vi用公式節點導入CRC8校驗的C程序,計算結果為一個CRC碼。 LabVIEW是一種程序開發環境,由美國國家儀器(NI)公司研制開發,類似于C
    發表于 08-13 08:00 ?178次下載
    labview的<b class='flag-5'>CRC8</b>校驗的詳細資料免費下載

    C語言應用】使用余式表的方式計算CRC16

    C語言應用】使用余式表的方式計算CRC16
    的頭像 發表于 08-31 13:10 ?1858次閱讀

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?860次閱讀