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

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

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

3天內(nèi)不再提示

單片機中常用的輕量級校驗算法

strongerHuang ? 來源:strongerHuang ? 2023-03-24 10:22 ? 次閱讀

UART有一個奇偶校驗,CAN通信有CRC校驗。Modbus、MAVlink、USB等通信協(xié)議也有校驗信息

在自定義數(shù)據(jù)存儲時,有經(jīng)驗的工程師都會添加一定校驗信息。

你平時通信,或者數(shù)據(jù)存儲時,你有用到校驗信息嗎?下面就介紹幾種常見的校驗算法。

校驗和

校驗和是最基本,也是嵌入式軟件工程師最常用的一種校驗算法,其實現(xiàn)方法很簡單,簡單到只有幾行代碼。

實現(xiàn)的方式方法很多,不同的編程語言,不同的應用有所不同,下面以C語言8位校驗和為例:

uint8_t CheckSum(uint8_t *Buf, uint8_t Len)
{
  uint8_t i = 0;
  uint8_t sum = 0;
  uint8_t checksum = 0;


  for(i=0; i

異或校驗

【異或校驗】與【校驗和】類似,對數(shù)據(jù)進行“異或”,最終得到一個“異或值”。

uint8_t CheckXOR(uint8_t *Buf, uint8_t Len)
{
  uint8_t i = 0;
  uint8_t x = 0;


  for(i=0; i
 校驗和、異或校驗的方式有很多種,比如有的還會傳入一個參數(shù)作為異或校驗的值。


當然,以上代碼僅供學習參考,實際應用需結(jié)合項目情況修改代碼。

CRC校驗

CRC:Cyclic Redundancy Check,即循環(huán)冗余校驗。

CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進行多項式計算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。

CRC校驗屬于冗余校驗中的一種,大學學計算機相關(guān)專業(yè)的同學都應該學過CRC校驗(學習時可能沒幾個同學搞明白了)

CRC有多種變體,比如:CRC-1、 CRC-5-USB、 CRC-8、 CRC-16、 CRC-32、 CRC-64等。其中,在嵌入式領(lǐng)域,CRC-16用的比較多。

常見CRC參數(shù)模型:

bf686df8-c97c-11ed-bfe3-dac502259ad0.png ?

比如一種在單片機上實現(xiàn)CRC16的源碼:

uint8_t CRCTAB_H[256] = {/*表省略*/};
uint8_t CRCTAB_L[256] = {/*表省略*/};
void CRC16(uint8_t *pData, uint8_t Len, uint8_t *CRC_H, uint8_t *CRC_L)
{
  uint8_t  i;
  uint8_t  index;
  uint8_t  crc_h = 0xFF;
  uint8_t  crc_l = 0xFF;


  for(i=0; i
 CRC校驗不同場景實現(xiàn)方式不同,網(wǎng)上也有很多公開的庫和源碼,比如:

LibCRC – C語言中的開源CRC庫:

https://github.com/lammertb/libcrc

網(wǎng)上還有在線計算CRC校驗值以及代碼生成工具,感興趣的讀者可以自行了解。

MD5算法

? MD5:Message-Digest Algorithm 5,即“信息-摘要算法。

從名字來看就知道它是從MD3、MD4發(fā)展而來的一種加密算法,其主要通過采集文件的信息摘要,以此進行計算并加密。

通過MD5算法進行加密,文件就可以獲得一個唯一的MD5值,這個值是獨一無二的,就像我們的指紋一樣,因此我們就可以通過文件的MD5值來確定文件是否正確,密碼進行加密后也會生成MD5值,論壇就是通過MD5值來驗證用戶的密碼是否正確的。

bf9501ba-c97c-11ed-bfe3-dac502259ad0.png


MD5是輸入不定長度信息,輸出固定長度128-bits的算法。經(jīng)過程序流程,生成四個32位數(shù)據(jù),最后聯(lián)合起來成為一個128-bits散列?;痉绞綖?,求余、取余、調(diào)整長度、與鏈接變量進行循環(huán)運算。得出結(jié)果。

MD5的源碼在網(wǎng)上都能找到現(xiàn)成的,而且有不同編程語言(C、 C++JAVA)版本。

比如由網(wǎng)友talent518分享的C語言版本:

https://github.com/talent518/md5

其他更多

隨著變成技術(shù)越來越發(fā)達,校驗算法也越來越多,有通用的算法,也有特殊領(lǐng)域特定的算法。

比如我之前做過密碼相關(guān)的開發(fā),使用了由密碼管理局發(fā)布的SM3密碼雜湊算法。

還有從MD4算法改進而來的SHA-1算法(Secure Hash Algorithm 1即安全散列算法1)。

本文就分享到這里,市面上的校驗算法還有很多,如有需要可自行上網(wǎng)了解。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2715

    瀏覽量

    463365
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4599

    瀏覽量

    92639
  • crc
    crc
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    29433
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7598

    瀏覽量

    136172
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1227

    瀏覽量

    101170

原文標題:單片機中常用的輕量級校驗算法

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于C8051F的CRC校驗算法的實現(xiàn)

    基于C8051F的CRC校驗算法的實現(xiàn) 
    發(fā)表于 03-14 17:14

    輕量級的ui框架如何去制作

    原創(chuàng)分享:自制輕量級單片機UI框架框架元素用戶接口代碼開源平時??碿sdn,但是從來沒有自己寫過。正好這幾天需要用單片機做一個簡易的ui界面,于是自己寫了一個輕量級的ui框架。發(fā)個cs
    發(fā)表于 07-14 07:39

    如何自制輕量級單片機UI框架?

    如何自制輕量級單片機UI框架?
    發(fā)表于 10-14 06:13

    算法移植到STM32單片機中常見的問題有哪些?

    算法移植到STM32單片機中常見的問題有哪些?
    發(fā)表于 11-22 07:10

    常用校驗算法有哪些?

    常用校驗算法有哪些,是不是和通信規(guī)約有關(guān)。比如MODBUS一般都用CRC16(不確定是不是叫這個)。這些校驗算法是之前積累下來的嗎。自己也可以定義一個校驗算法吧,只要發(fā)送端和接收端用
    發(fā)表于 11-03 06:50

    IP協(xié)議校驗算法程序

     IP 協(xié)議采用統(tǒng)一的校驗算法,其計算比較簡單:設(shè)校驗和初值為0,然后對數(shù)據(jù)每16位求異或,結(jié)果取反,便得校驗和。校驗時將數(shù)據(jù)(含校驗和)按
    發(fā)表于 08-13 10:55 ?1017次閱讀

    LTE系統(tǒng)的CRC校驗算法及DSP實現(xiàn)

    通過對兩種常用CRC校驗算法的研究分析,為TD-LTE測試儀表系統(tǒng)選擇了一種最優(yōu)的CRC校驗算法,并在TMS320C64xDSP中實現(xiàn)。將CRC校驗程序在CCS3.3中運行,其結(jié)果驗證
    發(fā)表于 02-23 14:58 ?30次下載

    單片機常用算法設(shè)計

    單片機常用算法歸納
    發(fā)表于 04-05 14:01 ?5次下載

    如何使用SMART編寫CRC的校驗算法程序

    本文檔的主要內(nèi)容詳細介紹的是如何使用SMART編寫CRC的校驗算法程序。
    發(fā)表于 10-24 08:00 ?4次下載
    如何使用SMART編寫CRC的<b class='flag-5'>校驗算法</b>程序

    如何使用51單片機實現(xiàn)CRC校驗算法

    介紹了CRC(循環(huán)冗余碼校驗)原理及集成混合信號片上系統(tǒng)單片機C8051F的新特性,推導獲得以字節(jié)為單位的數(shù)據(jù)序列CRC碼遞推算法,利用C8051F單片機的自帶CAN2.0B總線接口控
    發(fā)表于 12-17 16:09 ?17次下載
    如何使用51<b class='flag-5'>單片機</b>實現(xiàn)CRC<b class='flag-5'>校驗算法</b>

    原創(chuàng)分享:自制輕量級單片機UI框架

    原創(chuàng)分享:自制輕量級單片機UI框架框架元素用戶接口代碼開源平時常看csdn,但是從來沒有自己寫過。正好這幾天需要用單片機做一個簡易的ui界面,于是自己寫了一個輕量級的ui框架。發(fā)個cs
    發(fā)表于 11-05 15:20 ?29次下載
    原創(chuàng)分享:自制<b class='flag-5'>輕量級</b><b class='flag-5'>單片機</b>UI框架

    CRC校驗算法原理及c語言實現(xiàn)

    CRC校驗算法原理及c語言實現(xiàn)
    發(fā)表于 11-30 10:04 ?9次下載

    單片機中常用的C語言語句合集

    單片機中常用的C語言語句合集
    發(fā)表于 01-12 09:24 ?45次下載

    針對單片機開發(fā)的輕量級OTA組件

    今天為大家分享一款開源的,專為單片機開發(fā)的輕量級 OTA 組件:mOTA。
    的頭像 發(fā)表于 12-26 09:36 ?1355次閱讀

    單片機中幾種常見的校驗算法介紹

    CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進行多項式計算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的
    發(fā)表于 06-05 14:25 ?1575次閱讀
    <b class='flag-5'>單片機</b>中幾種常見的<b class='flag-5'>校驗算法</b>介紹