日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

c++判断奇偶_常用的数据差错控制技术(2) 奇偶校验

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++判断奇偶_常用的数据差错控制技术(2) 奇偶校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是嵌入式里數據差錯控制技術-奇偶校驗

  在系列第一篇文章里,痞子衡給大家介紹了最簡單的校驗法-重復校驗,該校驗法實現簡單,檢錯糾錯能力都還不錯,但傳輸效率實在是不高,在效率至上的大背景下,這種方法是不能容忍的。今天痞子衡繼續給大家介紹另一種也非常簡單但效率較高的校驗法-即奇偶校驗法。

一、奇偶校驗法基本原理

1.1 校驗依據

  奇偶校驗法的校驗依據就是判斷一次傳輸的一組二進制數據中bit "1"的奇偶性(奇數個還是偶數個)在傳輸前后是否一致,所以其實奇偶檢驗法有兩個子類:

  • 奇校驗:如果以二進制數據中1的個數是奇數為依據,則是奇校驗

  • 偶校驗:如果以二進制數據中1的個數是偶數為依據,則是偶校驗

  一般在同步傳輸方式中常采用奇校驗,而在異步傳輸方式中常采用偶校驗。

1.2 奇偶校驗位

  為了實現奇偶校驗,通常會在傳輸的這組二進制數據中插入一個額外的奇偶校驗位(bit),用它來確保發送出去的這組二進制數據中“1”的個數為奇數或偶數。
  劃重點,奇偶校驗位并不是用來標記原始傳輸數據中1的個數是奇數還是偶數,而是用來確保原始數據加上奇偶校驗位后的合成數據中1的個數是奇數或者偶數。

1.3 校驗方法

  常用的奇偶校驗共有三種:水平奇偶校驗,垂直奇偶校驗校驗和水平垂直奇偶校驗。以對32位數據:10100101 10111001 10000100 00011010進行校驗為例講解:

  • 水平奇偶校驗:對每一種數據的編碼添加校驗位,使信息位與校驗位處于同一行。

原始數據水平奇校驗位水平偶校驗位
1010010110
1011100101
1000010010
0001101001

  所以加上水平偶校驗位后應傳輸的數據是:101001010?101110011?100001000?000110101

  • 垂直奇偶校驗:將數據分為若干組,一組一行,再加上一行校驗位,針對每一列采樣奇校驗或偶校驗。

編碼分類垂直奇校驗垂直偶校驗
原始數據1010010110100101
1011100110111001
1000010010000100
0001101000011010
校驗位0111110110000010

  所以加上垂直偶校驗位后應傳輸的數據是:10100101 10111001 10000100 0001101010000010

  • 水平垂直奇偶校驗:也叫Hamming Code,其是在水平和垂直方向上進行雙校驗,其不僅可以檢測2bit錯誤的具體位置,還可糾正1bit錯誤,常用于NAND Flash里。這部分不屬于本文要討論的內容,痞子衡后續會專門介紹Hamming Code。

1.4 C代碼實現

  實際中水平校驗法應用比較多,此處示例代碼以水平奇校驗為例:

安裝包:codeblocks-17.12mingw-setup.exe
集成環境:CodeBlocks 17.12 rev 11256
編譯器:GNU GCC 5.1.0
調試器:GNU gdb (GDB) 7.9.1

// parity_check.c
//
#include
#include

/*!
* @brief 判斷當前byte的極性是否為奇
*
* @param byte, 待計算奇偶性的數據.
* @retval ture, byte極性(含1的個數)為奇數.
* @retval false, byte極性(含1的個數)為偶數.
*/
bool is_byte_odd_parity(uint8_t byte){
bool parity = false;
// 普通算法-byte逐位異或(需循環8次)/*
for (uint8_t i = 0; i < 8; i++)
{
parity ^= byte & 0x01u;
byte >>= 1;
}
*/
// 效率較高算法-計數byte中1的個數(需循環n次,n為byte中1的個數)
while (byte)
{
parity = !parity;
byte &= byte - 1;
}
return parity;
}

/*!
* @brief 獲取給定data的水平奇校驗位
*
* @param src, 待計算奇偶性的數據塊.
* @param lenInBytes, 待計算奇偶性的數據塊長度.
* @retval 0, data極性(含1的個數)為奇數.
* @retval 1, data極性(含1的個數)為偶數.
*/
uint32_t get_data_parity(uint8_t *src,
uint32_t lenInBytes)
{
uint32_t result = 0;
// 水平校驗法
// isDataOddParity用于判斷所有data bits的行極性是否為奇bool isDataOddParity = false;
while (lenInBytes--)
{
isDataOddParity ^= is_byte_odd_parity(*src++);
}
// result為所有data bits的奇校驗位
result = !isDataOddParity;

return result;
}

// main.c
//
#include
#include
#include "parity_check.h"

int main(void){
uint8_t data[4] = {0x31, 0x33, 0x04, 0x08};
uint32_t parity = get_data_parity(data, sizeof(data));

printf("parity = %d\n", parity);
return 0;
}

1.5 行業應用

  奇偶檢驗比較典型的應用是在串口UART上,玩過UART的朋友肯定了解串口奇偶檢驗位的作用,包括下位機MCU UART驅動的編寫,上位機串口調試助手的設置都需要注意奇偶校驗位。下圖是UART傳輸時序圖,奇偶校驗位是可選位,僅當使能時才會生效。不過作為嵌入式開發者,倒不必關注奇偶校驗的具體實現,因為MCU的UART模塊已經在硬件上支持了奇偶檢驗,我們只需要操作UART對應寄存器的控制位去使能奇偶檢驗功能即可。

二、奇偶校驗法失效分析

  在現實數據傳輸中,偶爾1位出錯的機會最多,2位及以上發生錯誤的概率比較低,且由于奇偶校驗實現簡單,具有相對理想的檢錯能力,因此得到廣泛使用。但奇偶校驗法有如下2個明顯的缺陷:

  • 奇數位誤碼能檢出,偶數位誤碼不能檢出

  • 不能糾錯,在發現錯誤后,只能要求重發。

  前面講的兩種校驗法實際上更多是針對byte傳輸校驗,而在實際應用中我們校驗的對象往往是數據包packet,有沒有其他比奇偶校驗法更好且針對packet的檢錯方法呢?痞子衡在下篇會繼續聊。

  至此,嵌入式里數據差錯控制技術之奇偶校驗痞子衡便介紹完畢了,掌聲在哪里~~~

總結

以上是生活随笔為你收集整理的c++判断奇偶_常用的数据差错控制技术(2) 奇偶校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久中出 | 日韩成人精品一区二区三区 | 日韩另类在线 | 国产午夜不卡 | 精品无码国产一区二区三区51安 | 一区二区视频播放 | 国产精品国产三级国产aⅴ下载 | 一级做a爰 | 国产传媒一级片 | 18禁裸乳无遮挡啪啪无码免费 | 亚洲欧美999 | 男人疯狂高潮呻吟视频 | 河北彩花av在线播放 | 97人妻精品视频一区 | 中文字幕在线观看网址 | 性色av免费观看 | 国产私拍视频 | www.黄色片网站 | 久久一久久 | 久久夜夜夜 | 日本韩国中文字幕 | 亚洲网站在线看 | 狠狠搞av | 国语对白做受按摩的注意事项 | 亚洲一区视频在线播放 | 欧美国产日本在线 | 在线精品观看 | 久久人人爽人人爽人人片av免费 | 国产麻豆一区二区三区 | 美女被男人桶出白浆喷水 | 日韩精品一区二区av | 欧美日韩在线成人 | 久久99国产精品 | 在线观看免费大片 | avtt在线播放 | 人人澡人人插 | 国产三级国产精品 | 国产清纯白嫩初高中在线观看性色 | 黄色一级影片 | 色欲无码人妻久久精品 | 天堂一区二区三区四区 | 六月丁香激情网 | 久久久免费网站 | 欧美黄一级 | 亚洲第6页 | 日韩插 | 粉嫩av网 | 无码免费一区二区三区免费播放 | 黄色网页入口 | 青青草免费在线观看视频 | 女女互慰揉小黄文 | 亚洲最大福利 | 青青草原亚洲 | 性高湖久久久久久久久免费 | 成人做爰100| 欧美大波大乳巨大乳 | 日韩r级在线观看 | 色婷婷精品 | 91大神精品| 欧美情爱视频 | 免费看国产黄色 | 亚洲一卡一卡 | 成人在线中文字幕 | 老牛av一区二区 | 日韩午夜免费 | 国产成人在线视频观看 | 国产精品美女高潮无套 | 欧美成在线观看 | 午夜在线成人 | a级黄色小视频 | 羞羞网站在线看 | 国产免费自拍视频 | 日本在线一 | 免费av福利 | 久久久久成人精品无码中文字幕 | 成人18视频免费69 | 黑人与亚洲人色ⅹvideos | 狠狠人妻久久久久久综合 | 成人免费看毛片 | 肥臀av| 亚洲视频五区 | 超鹏在线视频 | 国产欧美日韩在线 | 男人网站在线观看 | 人妻无码中文字幕 | 国模私拍在线观看 | 合欢视频在线观看 | 色网在线免费观看 | 国模无码视频一区二区三区 | 色批网站 | 一区二区高清视频 | 中文字幕三级电影 | 一区二区三区亚洲 | 亚洲少妇30p | 最好看的日本字幕mv视频大全 | 清清草视频 | 精品久久综合 | av成人在线电影 | 国产香蕉精品视频 |