99国产欧美另娄久久久精品_国内自拍农村少妇在线观看_久久亚洲道色宗和久久_日本aⅴ大伊香蕉精品视频_亚洲国产欧美日韩欧美特级_日本视频免费在线观看

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

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

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


    主站蜘蛛池模板: 91大神在线观看视频_久久国产色av老熟蜜臀av_一本—道久久a久久精品蜜桃_亚洲AV日韩AV鸥美在线观看_国产高潮a片羞羞视频涩涩_久久伊人影院_国产成人无码国产亚洲_成人av视频 | 久久精品一区_91影院在线观看_男男做爰猛烈高潮在线观看_天天综合网网欲色_无码一卡二卡三卡四卡_午夜影院在线观看免费_饥渴少妇高潮视频大全_488成人啪啪片 | 完全着衣の爆乳お姉さんが_av影视在线播放_奇米国产在线_亚洲女人在线观看_超碰9在线_狠狠综合久久久久综合_成人av专区精品无码国产_亚洲日韩亚洲另类激情文学一 | 欧美1区2区在线观看_亚洲线精品一区二区三区四区_日本黄色免费网址_亚洲AV成人午夜一区二区_中文字幕在线不卡播放_粗大猛烈进出白浆视频_久草高清在线_欧美一级理论性理论a | 黄色欧美日韩_在线一级_黄色一级片在线免费观看_亚洲色欲综合一区二区三区_婷婷去俺也去_国产一区观看_青青草免费在线观看_LULUHEI噜噜黑最新地址 | 中文字幕a∨在线乱码免费看_国产又粗又猛又爽又黄的视频软件_天天影视网网色色欲_成人做爰69片免费_日本精品成人一区二区三区视频_小小影视网在线观看_色综合久久精品_日韩欧美福利 | vr成人片在线播放网站_免费高清一区二区三区_精品国产青草久久久久96_国产一级牲交高潮片16_欧美视频精品全部免费观看_japan白嫩丰满少妇videoshd_粉嫩av一区二区三区四区五区_亚洲日韩av无码一区二区三区人 | 国产精品自拍av_caoporn最新地址_精品国产毛片_激情偷乱人伦小说视频_国产色视频在线播放_成年人国产在线观看_精品欧洲AV无码一区二区男男_国产熟熟 | 最新黄色在线_av网址免费观看_国内大量揄拍人妻精品視頻_一级做a爰片久久免费观看_国产亚洲午夜_亚洲视频你懂的_人人插97_久久国产精品久久精品国产 | 日产精品一区二区_国产鲁鲁视频在线播放_久久亚洲AV无码精品色午夜_日本中文字幕在线免费观看视频_欧美乱强伦XXXXX_久久一区欧美_久久av免费看_精品视频国产亚洲 | 永久黄软件免费观看_国产三级久久久久_欧美精品无码久久久潘金莲_成人一级大片_午夜免费福利片_亚洲综合一区国产精品_亚洲av日韩精品久久久久_哥也色视频 | 高清成人综合网_亚洲草草视频_国内一级大片_中文字幕第36页_国产视频精品久久_暗夜在线观看_强奷漂亮少妇高潮a片_亚洲国产精品午夜伦不卡 | ririai66在线视频观看_女人与拘性猛交视频_日本爽快片100色毛片_色综合视频一区中文字幕_欧美影院一区_欧美成人第一页_国产精品高潮呻吟av久久动漫_AV天堂久久天堂色综合 | 天天人人干_字幕专区码中文欧美在线_九色视频免费在线观看_日本又色又爽又黄的a片中文字幕_久久99精品国产麻豆婷婷洗澡_精品少妇一区二区三区免费观_动漫精品无码h在线观看_最近免费韩国日本HD中文字幕 | 新91av_女人被做到高潮视频_韩国精品一区二区三区无码视频_亚洲国产亚洲_天天综合亚洲色在线精品_成人在线播放网站_午夜成年_黄色a在线 | 熟睡人妻被讨厌的公侵犯_精品成人网_亚洲一区二区久久久久久_猫咪在线永久网站_老司机精品视频一区二区_日本免费AⅤ欧美在线观看_啦啦啦在线观看视频免费观看_国产精品美女久久久婷婷网站 | 精品一区二区三卡四卡网站_欧美日韩视频在线观看一区_91色视频_国产成人精品亚洲日本在线桃色_好男人2019视频社区_97国产在线_熟女乱中文字幕熟女熟妇_妖精视频一区 | 欧美一级鲁丝片_亞洲中文字幕第一_www.亚洲精品.com_欧美色香蕉_91桃色免费观看_红杏国产成人精品视频_国产精品片www48888_精品国产精品三级精品av网址 | 东京复仇者第三季天竺篇在线观看_99手机国产精品_国产网红福利视频一区二区_色wwwwww_五月香蕉网_天天操天天射综合_在线不卡中文_av观看免费 | 亚洲福利精品_精品国产经典三级在线看_国产免费网站在线观看_国产精品一区久久看_乱人伦中文字幕无码_国产精品人妻无码一区二区三区_又大又粗又爽又黄的少妇_草草影视CCYY国产日本 | 日产中文字幕在线观看_男人肌肌捅女人肌肌视频_99精品在线_四虎国产精品成人_在线一级成人_国产一区二区怡红院_欧美另类久久久精品_欧美顶级METART裸体全部自慰 | 久久久久久久美女_国产A级护士毛片_国产亚洲精品久久久999密壂_欧美日韩免费在线观看_日韩一级片免费视频_国产精品久久久久久婷婷动漫_国产在线精品免费_久久在现视频 | 久久天堂av综合色无码专区_夜夜爽影院_色呦呦免费看_四虎在线看_成人人人人人欧美片做爰_欧美高清欧美aⅴ片_久久久久久久99精品欧美产片_青青青伊人色综合久久 | 亚洲毛片一区二区_天天爱天天做天天添天天欢_黄视频福利_午夜影皖精品av在线播放_国产精品免费一区二区区_乱肉妇精品av_浮生影视在线观看免费_大波妺av网站影院 | 欧美熟妇性XXXXX_潜行者40集连续剧免费_一区二区免费在线视频_成人国产一区二区三区精品不卡_午夜影院免费观看_亚洲第一AV导航AV尤物_日韩精品亚洲精品第一页_国产精品欧美一区乱破 | www啦啦啦视频在线观看免费_一级国产aa片免费观看_无码精品A∨在线观看中文_九九精品视频在线观看_99国产精品2018视频全部_中国一级黄色片子_麻豆嫩芽忘忧草一区二区三区_99精品网 | 欧美一级另类_亚洲欧美中文日韩av一区_中文字幕第6页_日本特级大片_a级小视频_欧美xxx在线_色.com_乱人伦中文视频在线观看 | 欧美亚洲另类图片_男人的天堂免费视频_色噜噜狠狠色综合网图区_阿娇艳z门照片无码av4i_韩国一级片免费_一个人看的www视频免费播放_嗯快点别停舒服好爽受不了了_毛片成人免费看A片 | www.com超碰_久久中文精品无码中文字幕_中文天堂在线资源www_gogogo欧洲免费视频_午在线亚洲男人午在线_精品亚洲永久免费_色综合久久久久综合体桃花网_免费一级做a爰片 | 国产欧美一区二区久久性色99_精品国产1区二区_特黄A又粗又大又黄又爽A片软件_国产精品亲子乱子伦xxxx裸_a国产一区二区免费入口_黑人巨茎大战欧美白妇免费_999在线观看视频_亚洲成人一区在线 | 东凛mdyd950在线播放_亚洲中文无码卡通动漫3D_97国产精品人妻无码免费_欧美精品激情在线_国产精品久久久久77777丨_亚洲成在人线AV无码_日本免费看黄色_国产亚洲精品麻豆一区二区 | 18禁黄久久久AAA片_国产视频一二三区_五月花成人网_免费福利在线观看_激情毛片_欧美另类videossexo高潮_色在线观看视频_第一次爱的人免费看电视 | 国产偷伦视频片免费视频_久久影院一区二区三区_成人网免费在线观看_成人无码www免费视频网站软件_黄色网站免费观看视频_色综合天天_5g国产精品影院天天5g天天爽_wwxx在线观看免费 | 精品国产髙清在线看国产毛片_亚洲人午夜_美女扒开尿口给男人看_一级毛片片_亚洲日韩久久精品无码蜜桃臀_最新成人_欧洲丰满少妇做爰视频爽爽_国产在沙发上午睡被强 | 日日摸夜夜添夜夜躁好吊_千金不装了短剧免费观看_国产亚洲精品美女久久久久久久久久_亚洲国产一区av_亚洲三及片_亚洲国产午夜精品_国产精选免费视频_人人揉人人捏人人爽五月天 | 91成人精品_又爽又黄axxx片免费观看_国精一区二区三区_成人禁片又硬又粗太爽了_日日射影院_超碰人人草人人_成人国产精品蜜柚视频_黄色一级片免费观看 | 性少妇videosexfreexxxx片_国产精品视频_欧美35页视频在线观看_18禁美女裸体爆乳无遮挡_中文字幕久久精品波多野结百度_另类av一区二区三区_少妇下蹲露大唇无遮挡_国产四区视频 | 粉嫩老牛aⅴ一区二区三区_a级毛片免费网站_粉嫩av一区二区三区免费观看_俄罗斯粗大猛烈18P_九色国产在线_亚洲欧洲天堂_一区二区三区四区在线视频_国产成人久久av免费高清蜜臀 | 久久久精品午夜免费不卡_99免费在线视频观看_啊v视频_神马香蕉久久_免费看一级黄色_欧亚av_亚洲热视频在线观看_久久精品免费看 | 欧美一级射_日本丰满熟妇有毛_99免费视频网站_一级片欧美日韩_国产19页_国产精品国产三级国产av品爱网_大二情侣宾馆啪实拍_深夜看国产毛片在线视频香蕉 | 1区2区3区高清视频_xxxx中国一级片_日本啪啪网站永久免费_怡红院一区_国产成熟女人性满足视频_超薄肉色丝袜一二三四区_69免费网站_99久久精品费精品 |