免费国产网站_秋霞午夜一区二区三区视频_99热在线看_日韩精品久久一区二区_午夜看一级毛片_天天鲁在视频在线观看

  • 串口數(shù)據(jù)包解析代碼分析

    2019/1/10??????點擊:
    這里以串口作為傳輸媒介,介紹下怎樣來發(fā)送接收一個完整的數(shù)據(jù)包。過程涉及到封包與解包。設(shè)計一個良好的包傳輸機(jī)制很有利于數(shù)據(jù)傳輸?shù)姆€(wěn)定性以及正確性。串口只是一種傳輸媒介,這種包機(jī)制同時也可以用于SPI,I2C的總線下的數(shù)據(jù)傳輸。在單片機(jī)通信系統(tǒng)(多機(jī)通信以及PC與單片機(jī)通信)中,是很常見的問題。
    一、根據(jù)幀頭幀尾或者幀長檢測一個數(shù)據(jù)幀
    1、幀頭+數(shù)據(jù)+校驗+幀尾
    這是一個典型的方案,但是對幀頭與幀尾在設(shè)計的時候都要注意,也就是說幀頭、幀尾不能在所傳輸?shù)臄?shù)據(jù)域中出現(xiàn),一旦出現(xiàn)可能就被誤判。如果用中斷來接收的話,程序基本可以這么實現(xiàn):
    unsigned char recstatu;//表示是否處于一個正在接收數(shù)據(jù)包的狀態(tài)
    unsigned char ccnt;      //計數(shù)
    unsigned char packerflag;//是否接收到一個完整的數(shù)據(jù)包標(biāo)志
    unsigned char rxbuf[100];//接收數(shù)據(jù)的緩沖區(qū)
    void UartHandler()
    {
           unsigned char tmpch;
           tmpch = UARTRBR;
           if(tmpch 是包頭)                          //檢測是否是包頭
          {  
                recstatu = 1;
                ccnt   = 0 ;
                packerflag = 0;
                return ;
           }
           if(tmpch是包尾)                          //檢測是否是包尾
           {
                recstatu = 0;
                packerflag = 1;                      //用于告知系統(tǒng)已經(jīng)接收到一個完整的數(shù)據(jù)包
                return ;
           }
          if(recstatu ==1)                           //是否處于接收數(shù)據(jù)包狀態(tài)
          {
                rxbuf[ccnt++] = tmpch; 
          }
    }
    上面也就是接收一個數(shù)據(jù)包,但是再次提醒,包頭和包尾不能在數(shù)據(jù)域中出現(xiàn),一旦出現(xiàn)將會出現(xiàn)誤判。另外一個。數(shù)據(jù)的校驗算法是很必要的,在數(shù)據(jù)傳輸中,由于受到干擾,很難免有時出現(xiàn)數(shù)據(jù)錯誤,加上校驗碼可在發(fā)現(xiàn)數(shù)據(jù)傳輸錯誤時,可以要求數(shù)據(jù)的另一方重新發(fā)送,或是進(jìn)行簡單的丟棄處理。校驗算法不一定要很復(fù)雜,普通的加和,異或,以及循環(huán)冗余都是可以的。我上面的接收程序在接收數(shù)據(jù)時,已經(jīng)將包頭和包尾去掉,這些可以根據(jù)自己的需求加上,關(guān)鍵是要理解原理。
    上述包協(xié)議出現(xiàn)了以下的幾種變種:
    1.1 幀頭+數(shù)據(jù)長度+數(shù)據(jù)+校驗值
    1.2包長+校驗值
    上面兩種其實都是知道了數(shù)據(jù)包的長度,然后根據(jù)接收字節(jié)的長度來判斷一個完整的數(shù)據(jù)包。例如,定義一個數(shù)據(jù)包的長度為256字節(jié),那我們就可以一直接收,直到接收到256個字節(jié),就認(rèn)為是一個數(shù)據(jù)包。但是,會不會存在問題呢?比如說從機(jī)向主機(jī)發(fā)送數(shù)據(jù),發(fā)送了一半,掉電,重啟,開機(jī)后繼續(xù)發(fā)送,這很明顯接收到的數(shù)據(jù)就不對了,所以此時很有必要定義一個超限時間,比如我們可以維護(hù)下面這樣的一個結(jié)構(gòu)體。
    struct  uartrd{
    char  rd[ 256];
    unsigned int timeout;
    }
    成員變量rd用來存放接收到的數(shù)據(jù)字節(jié);成員變量timeout用來維護(hù)超時值,這里主要討論這個。這個數(shù)值怎么維護(hù)呢,可以用一個定時器來維護(hù),以可以放在普通的滴答中斷里面來維護(hù),也可以根據(jù)系統(tǒng)運(yùn)行一條指令的周期,在自己的循環(huán)中來維護(hù),給其設(shè)置個初值,比如說100,當(dāng)有第一個數(shù)據(jù)到來以后,timeout在指定的時間就會減少1,減少到0時,就認(rèn)為超時,不論是否接收到足夠的數(shù)據(jù),都應(yīng)該拋棄。
    二、根據(jù)接收超時來判斷一個數(shù)據(jù)包
    2.1  數(shù)據(jù)+校驗
    核心思想是如果在達(dá)到一定的時間沒有接受到數(shù)據(jù),就認(rèn)為數(shù)據(jù)包接收完成。modbus協(xié)議里就有通過時間間隔來判斷幀結(jié)束的。具體實現(xiàn)是要使用一個定時器,在接收到第一個數(shù)據(jù)時候,開啟定時器,在接收到一個數(shù)據(jù)時候,就將定時器清零,讓定時器重新開始計時,如果設(shè)定的超時時間到(超時時間長度可以設(shè)置為5個正常接收的周期),則認(rèn)為在這一段時間內(nèi)沒有接受到新的數(shù)據(jù),就認(rèn)為接收到一個完整的數(shù)據(jù)包了。

    簡單的小的總結(jié),上述幾種方法都還是較為常用的,在具體的實現(xiàn)上,可以根據(jù)具體的實際情況,設(shè)計出具體的通訊協(xié)議。數(shù)據(jù)校驗位,有時候感覺不出來其重要性,但是一定要加上,對數(shù)據(jù)進(jìn)行一個相關(guān)的驗證還是必要的。現(xiàn)在很在MCU都帶有FIFO,DMA等功能,所以有時候利用上這些特性,可以設(shè)計出更好的通訊方式。有的人問在接受串口數(shù)據(jù)時候是應(yīng)該中斷一次接收一個,還是進(jìn)入中斷后接收一段數(shù)據(jù)呢,我認(rèn)為應(yīng)該中斷接收一個,因為CPU是很快的,至少對于串口是這樣,在接受每個數(shù)據(jù)的間隔期間,處理器還是可以做些其他工作的。這是在裸機(jī)下的模型。在多線程中,那就可以直接建立一個數(shù)據(jù)接收線程。


    主站蜘蛛池模板: 99久久九九免费观看_国产爆乳无码视频在线观看_污18禁污色黄网站免费观看_国产午夜片_色噜噜品一区二区三区孕妇_国产日产亚欧系列 | 6080yy午夜不卡一二三区_日韩无限资源_AV无码中文一区二区三区四区_99国产精品久久一区二区三区_91精品啪在线观看国产81旧版_美女中文字幕视频 | 日韩www视频_久久超碰97人人做人人爱_午夜手机在线_久久国产美女视频_欧美成人在线直接看视频网站_两个人看的www免费视频中文 | 久久久久久国产精品三级_伊人网在线免费视频_国产成人69视频午夜福利在线观看_美女很黄很黄免费_精品一区二区视频在线观看_中文人妻熟妇乱又伦精品 | 九九九网站_虚拟VR一区二区三区_国产天堂网一区二区三区_一区二区免费网站_亚洲av无码一区二区一二区_国产成人免费播放 | 日本高清动作片www_日本va在线观看_一本大道视频大全在线_四虎影视最新地址_国产精品久久9a久美女性色_西行纪60集全免费播放 | 伦一理一级一a一片_av亚洲av影院av天堂_日本三级在线观看网站_国产AV国片偷人妻麻豆郑州公司_亚洲免费二区三区_免费看片一区二区三区 | 亚洲日韩第一页_美女视频黄免费_av亚洲产国偷v产偷v自拍软件_国产精品一区久久人人爽_亚洲精品日韩精品_日日夜夜精品免费看 | 久久精品大片_青草久久久国产线免观蜜芽_无码国产精品一区二区免费久久_久久中文字幕人妻熟AV女_福利视频一二区_日日夜夜操操操 | 亚洲精品国产成人综合久久久久久久久_亚洲精品国产一_久黄色片_中文字幕一区二区三区免费_91精品在线免费观看视频_最新精品视频 | 无码专区一va亚洲v专区_性爱视频在线播放_日韩在线精品一二三区_欧美日韩精品一区二区三区_丝袜无码专区人妻视频_成人午夜特黄aaaaa片男男 | 日韩欧美国产成人一区二区_黑人性受xxxx黑人xyx性爽_xxxxx免费视频_一区二区三区免费中文视频_久久黄色一级片_又爽又黄无遮拦成人网站 91av在线免费_日韩三区视频_久久丫精品_视频一区视频二区欧美_久久免费看片_永久免费观看午夜成人网站 | 国产视频久久久久_99在线免费_亚洲成人精品_无码精品第1页_成人va视频_国产精品偷伦费观看一次 | 公好大太涨快点深一点_一区二区三区视频免费在线观看_久久婷婷国产综合精品简爱Aⅴ_JIZZ中国熟女_1024国产在线观看_亚洲日本无码一区二区三区 | 爱做久久久久久_精品国产91_国产一级网站视频在线_日躁夜躁狠狠躁2001_精品午夜国产福利观看_精品视频在线播放一区二区三区 | 国产99久久久国产精品~~牛_日本www_九七在线视频_久久国产色综合_粉色视频在线观看高清免费完整_一级黄色免费视频 | 国内自拍视频网站_1024污_亚洲免费a视频_91视频欧美_久久久久久久久久久久久久动漫_久久无码喷吹高潮播放不卡 | 国产欧美中文_美丽人妻在夫前被黑人_久久成人成狠狠爱综合网_免费视频看片网站_黄色极品网站_国产视一区 | 91干比_亚洲一区国产精品_91精品国产综合久久不卡98_一级特黄免费_操穴在线_成人无码α片在线观看 | 一级片国产精品三级一区二区三区_野花日本大全免费观看中文7_t婷婷五月网在线观看网站_中文字幕第一页在线_少妇人妻偷人激情视频_韩国三色电费2024免费吗 午夜精品久久18免费观看_在线看亚洲十八禁网站_色77久久综合网_亚洲国产一区二_最新av在线网站_亚洲啊v | 久久久免费毛片_色先锋资源久久综合5566_91视频久久_国产精品自拍99_一级毛片欧美真人视频_亚洲欧美日韩中文无线码 九九热综合_亚洲综合精品成人_欧美a在线视频_国产性色AV内射白浆肛交后入_日皮免费视频_亚洲国产欧美另类 | 在线黄网_成人A片产无码免费视频奶头红杏_午夜伊人_荡女精品导航_9色av_欧美另类极品videosbest视频 | 欧美亚洲日本在线观看_青青操91_黄色一级免费在线观看_亚洲AV无码一区二区三区鸳鸯影院_水蜜桃yy8848私人视院_国内偷拍第一页 | 给我免费播放片高清在线观看视频_电锯惊魂1在线观看免费观看中文版_欧美99久久无码一区人妻A片_又黄又湿免费高清视频_一区二区三区四区高清视频_亚洲欧美日韩精品a∨ | 少妇人妻无码专区视频_99国产欧美另类久久片_四虎影视欧美_亚洲人成网站777色婷婷_欧洲精品VA无码一区二区三区_国产精品中文字幕av | 中文人妻AV大区中文不卡_久章草在线无码视频观看_81av在线_男女作爱免费网站_国产办公室无码视频在线观看_亚洲人体一区二区三区 | 鲁一鲁一鲁一鲁一曰综合网_国产在线无码一区二区三区_亚洲AV中文无码乱人伦在线观看_真实国产乱子伦精品一区二区三区_欧美大尺度一区二区_伊人成人在线视频 | 国产麻豆精品在线_国产又黄又潮娇喘视频在线观看_婷婷久久综合网_亚洲AV鲁丝一区二区三区黄_国产精品嫩草影院入口_视频综合网 | 免费看a级黄色片_国内午夜无码不卡在线观看_欧美人与禽Z0ZO牲伦交_91精品国产综合久久久久_国产小视频在线_精品少妇无码AV无码专区 | 国产精品青青青在线观看_91高清免费在线观看_国产一区二区三区视频观看_美女极度色诱图片www_免费一级欧美_亚洲国产精品成人久久 | 亚洲日韩中文字幕无码一区_久久久久综合网_日韩中文字幕网站_夜夜爽浪潮av99_九九久久精品国产免费看小说_催眠教师~淫辱の教室 又爽又猛又粗国产免费_夜夜躁狠狠躁_欧美三极_无码成人片在线播放_高清一区二区三区视频_欧美久久久久久久久久伊人 | 亚洲在线影院_亚洲国产日韩一区_日韩a视频_亚洲成人网在线观看_一级a毛片_久久久亚洲精品成人 | 超碰7777_日本一区二区三区播放_久久伊人成色777综合网_麻豆av.com_99视频在线视频_亚洲欧洲国产码专区在线观看 | 黄动漫在线免费看_奇米影视一区_亚洲伊人成无码综合网_国产色无码专区在线观看_搡老熟女老女人一区二区_围产精品久久久久久久 | 天天干夜夜操_国产精品hongkong在线_WWW国产亚洲精品久久久_亚洲天堂二区_一二区视频_www.蜜桃vv.com | 九九热综合_亚洲综合精品成人_欧美a在线视频_国产性色AV内射白浆肛交后入_日皮免费视频_亚洲国产欧美另类 | 精品五夜婷香蕉国产线看观看_国产小伙和50岁熟女59P_手机福利在线视频_一区免费视频_亚洲第一国产视频_久久久不卡网国产精品一区二区 | 日本女人黄色大片_任你操视频_精品成人免费视频_日韩天堂视频_久久综合二区_日韩一级片观看 | 一区二区三区精彩视频_热RE99久久6国产精品免费_高潮按摩久久久久久av免费_a∨网站_午夜av网站_欧美黄色一级录像 | 中文字幕影视免费观看_激情内射人妻1区2区3区_日韩精品麻豆_另类尿喷潮videofree_欧美日韩在线综合_18pao强力打造免费视频基地 | 性少妇videosexfreexxxx_亚洲一区自拍偷拍_亚洲人成日韩中文字幕不卡_国产在线不卡观看_免费视频成人片在线观看_国产精品久久人 |