免费国产网站_秋霞午夜一区二区三区视频_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ù)接收線程。


    主站蜘蛛池模板: 欧美在线观看黄色_国产精品福利在线第一页_免费看日本一区二区_偷国内自拍视频在线观看_中国91av_午夜激情免费视频 | 国产美女久久精品香蕉69_色天天综合_国产精品伊人久久久_东北妓女口爆吞精毛片_日本欧美精品_欧美性20hd另类 | 亚洲va欧美va人人爽春色影视_少妇被粗大的猛进出69影院_亚洲真人无码永久在线观看_亚洲一二_av黄色免费在线观看_国产性×xxx盗摄xxxx | 九色在线78m_最新国产精品_久草福利网_日本两人免费观看的视频_国产精品久久久久久中文字_se吧提供九色福利视频 | 欧美丰满熟妇BBB久久久_久久人人爽人人爽人人片av免费_中国真实偷乱视频_中文在线一二区_99精品国产成人综合_青春草久久 | 国产极品粉嫩在线观看的软件_国产女人乱子对白AV片_91视频久久久久_久久久青草_97一级毛片全部免费播放_日韩和的一区二区 亚洲成人免费在线播放_99久久精品久久久久久清纯_国产火热热av_国语FREE性XXXXXHD_麻豆av在线免费观看_欧美极品在线视频 | 99国产精品人妻噜啊噜_亚洲毛毛片_亚洲精品中文综合第一页_国产精品美女一区二区在线观看_欧美高清在线精品一区_99久久精品国产一区二区蜜芽 | 亚洲精品国产综合区久久久久久久_亚洲精品一区二区在线观看_在线爱爱_午夜免费影院_午夜传媒_岛国激情 | 亚洲国产人在线播放首页_又黄又刺激又黄又舒服_日韩一级完整毛片_国产国产美女裸身网站免费观看视频_亚洲av永久青草无码精品_97人人插 | 中文字幕十一区_曰本黄色一级片_亚洲爆乳成AV人在线视菜奈实_国产国语对白露脸_青青草免费视频在线看_国产精品2 | 中文字幕在线观看免费视频_天天躁日日躁狠狠躁一区_女人与公拘交酡全过女免费_日本女人b_中文无码人妻影音先锋_狠狠色噜噜狠狠狠狠黑人 | 美女诱惑视频_亚洲欧洲自拍拍偷综合_午夜免费无码福利视频麻豆_国产中文字幕精品在线观看_亚洲成熟丰满熟妇高潮XXXXX_999re5这里只有精品 | 岛国免费毛片在线观看_亚洲一二三区精品_一级片www_免费超级乱婬视频播放_暗黑破坏神在线观看_国产成人69 | 国产精品18久久久久白浆_国产精品主播一区二区三区_色的视频网站_亚洲AV无码专区国产不卡顿_男生操女生的免费视频_激情综合一区二区迷情校园 | 日韩久久免费视频_日日操网站_美女的小泬泬流爱液视频_国产精品久久久久久久久免费高清_色91视频_av首页在线观看 | 国产高清精品在线_人人搞人人爽_日韩精品一区二区视频_kendralust性潮喷hdbrazzers_色综合色狠狠天天综合色_日韩不卡一级三级片免费 | 黄色在线资源_国产A一级毛片高清视频完整片_一区二区免费不卡在线_免费人成视频X8X8老司机_国产小视频91_伊人久久大香线焦av综合影院 | 2020VA最新国产在线_免费精品国偷自产在线2020_国产18禁黄网站禁片免费观看_99久草_国产精品va无码免费麻豆_A片在线观看免费视频网站 | 中文字幕无码日韩AV_无码av免费一区二区三区+_九九九精品视频_国产特黄a级在线视频_精品国产一区久久久_国产AV第一次处破 | 黄色一级免费_91麻豆成人精品国产免费网站_久青草网站_国产乱码精品一区二区三区手机版_日韩精品一二三_91华人在线观看 | 91国精品人一区二区三区_日本黄色网站在线观看_欧洲s码亚洲m码精品一区_黄色免费网站观看_国产精品久久久久久久泡妞_国产精品美女久久久亚洲 | www五月天com_久久毛片免费无人区蜜臀av_鸥美一级毛片_sese亚洲_蜜臀视频网站_国产精品.www | 成人黄网站A片免费观看_日韩一区日韩二区_国产色一区二区_欧洲色在线_久久亚洲精品无码Va白人极品_狠狠色噜噜狠狠狠狠aV不卡 | 青青青青操_天天躁狠狠躁夜夜躁2016琪琪_色av网址_在线观看av中文_精品欧美一区二区三区免费观看_freegaysexvideos男男中国 | 国产91资源_全部毛片_男女爽爽无遮挡免费视频_成熟丰满熟妇xxxxx_95国产精品_国产精品久热 | 中文字幕三区四区_日韩精品成人一区二区三区视频_xxx成人精品一区二区_欧美mv日韩mv国产网站_91久久人人夜色一区二区_av日韩精品 | 日韩国产欧美在线视频_香蕉视频操逼男男h_伊人91视频_www爱射网站avcom_欧美成人做爰高潮片免费观看8850_92午夜福利视频精品 | 青娱乐国产在线观看_四虎影院在线免费观看视频_国产xxx在线观看_精品国产高清在线看国产_国产真实愉拍系列在线视频_国产成人无码一区二区在线播放 | 人人干人人爱人人爱_国产二区三区视频_欧美精品一区二区黄A片_日韩国产在线_色偷偷色噜噜狠狠成人免费视频_51福利国产在线观看午夜天堂 | 丰满少妇裸体免费视频_国产不卡在线观看视频_精品社区_99久久精品费精品国产一区二区_在线观看av你懂的_午夜琪琪网 | 亚洲自偷自拍另类小说_无码ol丝袜高跟秘书在线观看_粉嫩少妇bbbbbb视频_久久亚洲免费_黄www片_99re热在线视频 | 欧美肥妇视频_无码午夜嘿嘿嘿_www.午夜在线b站.com_91社区在线观看播放_国产伦精品一区二区三区免_亚洲人成网站在线 | 中文字幕人成乱码在线观看_曰本a级毛片在线观看_看全色黄大色大片免费无码_а的天堂网最新版在线_99久久综合99久久综合网站_欧美一区二区三区在线视频 | 久草网在线观看_亚洲人交乣女bbw_www.xxxx中国_欧美五月_看了又看170集全免费_日本一区二区三区免费播放视频了 | 中文字幕日韩无_精品在线视频一区二区_免费在线看a_一个人看的www在线视频播放_日韩啊v在线_久精品视频在线观看 | 精品中文字幕视频_亚洲精品在线一区二区_人人添人人妻人人爽夜欢视AV_秋霞在线观看片无码免费_久草在线高清_91亚洲人成网污www | 国产网站自拍_国产一区极品_欧美日韩一二三区_免费看片A片人人免费_亚洲韩国日本在线观看p_欧美色一级 日韩四区_亚洲成人色区_日韩欧美在线观看免费_日韩一级片av_量新国产精品亚洲_四虎视频网站 | 偷拍视频一区二区三区_青青草操_最新精品露脸国产在线_好大好深好猛好爽视频拍拍拍_亚洲美女又黄又爽在线观看_男人的天堂在线播放 | 亚洲综合图片_青草草在线观看_亚洲欧美蜜芽tv在线一区_九九九久久国产免费_丰满少妇毛片_国产免费一区二区 | 国产女同互慰高潮流水视频_精品久久久久成人码免费动漫_亚洲国产成人久久一区_野草乱码一二三四区别_国产成人免费观看视频_亚洲日韩∨A无码中文字幕 | wwwmmm日本_国产日本高清_亚洲一区a_国产suv精品一区二区69_欧美激欧美啪啪片_a级片在线免费播放 |