前言
因?yàn)橥饨缈倳?huì)對(duì)電路存在或多或少的干擾,對(duì)于數(shù)字信號(hào),很可能導(dǎo)致傳輸?shù)臄?shù)據(jù)出現(xiàn)千差萬(wàn)別。
對(duì)于很多需要傳輸數(shù)據(jù)的場(chǎng)合,尤其是一些數(shù)據(jù)可能會(huì)影響一些硬件的動(dòng)作(諸如嵌入式的一些設(shè)備、機(jī)器人等),錯(cuò)誤的數(shù)據(jù)可能會(huì)帶來(lái)一些隱性風(fēng)險(xiǎn),想想都可怕。
由于本人是嵌入式相關(guān)領(lǐng)域的,平時(shí)玩的都是單片機(jī),當(dāng)然單片機(jī)的性能千差萬(wàn)別,不過(guò)很多的性能都只能說(shuō)是勉強(qiáng)夠用,畢竟成本考慮。
所以今天的校驗(yàn)算法,比較簡(jiǎn)單,但是有效,尤其是一些性能一般的硬件。
說(shuō)道今日主角:累加和校驗(yàn)算法,又名CheckSum算法。至于出處,這里就不考究了。
累加和校驗(yàn)算法的實(shí)現(xiàn)
發(fā)送方:
對(duì)要數(shù)據(jù)累加,得到一個(gè)數(shù)據(jù)和,對(duì)和求反,即得到我們的校驗(yàn)值。然后把要發(fā)的數(shù)據(jù)和這個(gè)校驗(yàn)值一起發(fā)送給接收方。
接收方:
對(duì)接收的數(shù)據(jù)(包括校驗(yàn)和)進(jìn)行累加,然后加1,如果得到0,那么說(shuō)明數(shù)據(jù)沒(méi)有出現(xiàn)傳輸錯(cuò)誤。
注意,此處發(fā)送方和接收方用于保存累加結(jié)果的類型一定要一致,否則加1就無(wú)法實(shí)現(xiàn)溢出從而無(wú)法得到0,校驗(yàn)就會(huì)無(wú)效。
還是舉個(gè)例子:
發(fā)送方:要發(fā)送0xA8,0x50,我們使用unsigned char(8位)來(lái)保存累加和,即為0xF8(0b11111000),取反得到校驗(yàn)和為0x07(0b00000111)。然后將這三個(gè)數(shù)據(jù)發(fā)送出去。
接收方:如果接收正確,這三個(gè)數(shù)據(jù)的累加和就是(0b11111111),此時(shí)加1,則得到的結(jié)果為0(實(shí)際得到的應(yīng)該是0b100000000,但是由于是使用unsigned char(8位)來(lái)保存累加和,所以高位被截取掉,只剩下了低八位的8個(gè)0).
由上面的例子,我們可以知道算法的目的是:使累加和和校驗(yàn)值相加得到一個(gè)二進(jìn)制下每一位都是1的結(jié)果,這個(gè)結(jié)果很明顯很好處理,這種算法實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單,下面給出C語(yǔ)言的代碼示例。
發(fā)送方:以下是如何得到校驗(yàn)值的代碼,結(jié)果就是我們想要的校驗(yàn)值。
接收方:輸入已包含發(fā)送發(fā)發(fā)來(lái)的校驗(yàn)值,如果函數(shù)返回的值如果是0,說(shuō)明數(shù)據(jù)正確。
責(zé)任編輯:lq
-
嵌入式
+關(guān)注
關(guān)注
5141文章
19537瀏覽量
315064 -
累加
+關(guān)注
關(guān)注
0文章
6瀏覽量
6860 -
校驗(yàn)算法
+關(guān)注
關(guān)注
0文章
5瀏覽量
6666
原文標(biāo)題:累加和校驗(yàn)算法在嵌入式中的應(yīng)用~
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
用TXT編輯器打開(kāi)十六進(jìn)制文件,如何知道校驗(yàn)和值?
相位累加器的實(shí)現(xiàn)原理

基于Verilog語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)

FOC 算法實(shí)現(xiàn)永磁同步電機(jī)調(diào)整指南
PID控制算法的C語(yǔ)言實(shí)現(xiàn):PID算法原理
請(qǐng)問(wèn)ads1292算法支持實(shí)現(xiàn)疲勞監(jiān)測(cè)嗎?
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+第九章sigma delta adc閱讀與分享
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+一本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書(shū)
UDP丟包的原因和解決方案

名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)
C加密算法的實(shí)現(xiàn)

【GD32 MCU 入門教程】GD32 MCU 常見(jiàn)外設(shè)介紹(8)SPI 模塊介紹

評(píng)論