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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

上下位机通讯协议_嵌入式中自定义协议的一些典型例子

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上下位机通讯协议_嵌入式中自定义协议的一些典型例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


關于自定義協議,對于會的人很簡單,對于不會的人就摸不著頭腦。下面分享一些關于自定義協議的筆記。

什么是協議?

協議這個概念我覺得挺雜的。就像嵌入式的概念一樣,說法不一,比如大家常常爭論FPGA是不是嵌入式、單片機是不是屬于嵌入式等等。下面簡單看一下嵌入式中協議這個概念。

在互聯網領域,協議常常指的是網絡協議。

在嵌入式中,協議按大類分主要可分為底層協議(硬件層協議/物理層協議)與上層協議(用戶層協議應用層協議),根據實際還可細分成很多層。底層協議如串口等,底層協議決定著數據傳輸的方式(傳輸數據需要多少條信號線,傳輸數據的時序是怎樣的)。上層協議決定著這些數據是拿來干什么用的。太難解釋了。。看實例吧:

這是多功能電能表的協議通訊協議,其中底層協議是485通訊,上層協議有很多條,但格式基本都統一:

每一幀(包)數據的格式都類似是這樣子的格式,例如讀數據協議:

主站往從站發送數據(控制器->智能電表):

從站往主站發送數據(智能電表->控制器):

明確了協議之后,該發什么數據、收到的數據是怎么樣我們都心里有數,那么這個通信的過程就很明朗了。一般控制器往外發送協議數據都比較簡單,重點是返回數據的處理(解析),解析方式根據協議的不同而有不同的方法。

協議(上層協議)按照通用性來分可以分為專有協議與自定義協議,例如上面電表的協議其實是專有協議(具有一些標準的協議):

自定義協議就是我們開發者可以針對一些應用、一些需求自己制定的一些協議。下面來分享一些常見的自定義協議:

常見的自定義協議

在我們嵌入式開發中,自定義協議的應用很多。例如上下位機之間的通訊、控制器與控制器之間的通訊、服務器與設備終端之間的通訊等。自定義協議也沒有什么特定的規范、標準,可以很靈活地制定,只要能滿足開發需要即可。下面依舊以實例來做分享:

例子一(典型):

之前有個物聯網項目,服務器往我們終端設備發送的協議數據類似于:

我們設備終端需要用到協議數據中字段的實際數據,整個數據包是字符串的形式,這時候可以用sscanf函數來做解析:

關于sscanf函數就不做解釋了,不會的朋友自行百度。sscanf函數在做類似的解析非常好用,很多時候都可以使用。如:

因為是兩端通訊,當然要確保通訊的正確性。比如服務器往設備發送數據,怎么知道有沒有發送,這就得設備端在收到數據的同時回應相應的數據包。可以使用與sscanf函數相對應的sprintf函數做組包操作。比如(這個sprintf例子與上例無關,只是為了說明一下sprintf的用法):

一端給另一端發送數據一般有兩種,以設備端在往服務端發送數據為例:

(1)當設備收到服務端的數據時,會回應與之對應的數據,這稱為被動應答。

(2)設備主動給服務端發送數據,例如設備常常定時、主動地給服務端發送一些時間戳信息等(俗稱心跳包),這樣服務端就知道設備是在正常工作的(活著的狀態)。這稱為主動發送或主動申請。

在處理這些字符串形式的協議數據的時候用sscanf、sprintf、strcmp、strstr、strcat等函數非常方便,有時候可以搭配正則表達式來做匹配。

例子二(典型):

之前有個項目需要從控制板顯示主控制板的運行狀態,兩控制板之間使用的底層協議為485協議。上層協議(從控板接收數據協議)如:

這里省略的部分為其他信息,比如整個數據包的長度等。

解析函數如:

這里的應用比較簡單,只是解析一個報警信息來顯示。有時候需要用到整個數據包里的數據,這時候我們可以建立一個結構體來保存所有我們需要的數據,這樣方便我們清晰、有條理地對數據進行處理。例如:

例子三(其它):

上面的兩個例子中的自定義協議是比較典型的、用得比較多的。下面也分享其它我自己的一些例子,很多時候為了滿足我們自己通訊應用的需要,我們也會自己建立一些自己的小協議來滿足我們的需求。

(1)例子一

之前使用串口屏與STM32通訊的時候,我們有制定一些對應的協議。

為了讓STM32能識別我串口屏不同頁面發送的數據,必須要制定一條協議來識別頁面:

這樣,每切換至不同的頁面時,就會往STM32發送關于頁面的協議數據,這樣我們就可以知道當前處于哪個界面。

為了讓STM32能接收到正確的WiFi設置信息(如何區分WiFi名與密碼),必須要給WiFi信息添加一些輔助協議數據,如:

相應的解析處理函數:

(2)例子二

之前在一個單相用電器監測的應用中,有用到zigbee無線通訊,即其中一塊控制板做采集板。另一塊控制板做顯示板,有些朋友可能會有疑問為什么不做在同一塊板上?其實這是一道全國大學生電賽題,我們只是根據題目要求來做的:

我們當時在做這個通訊時也是有制定一個簡單的協議,在數據前面加個標識,就像JSON格式數據的鍵值對。

我們制定的協議如:

相應的解析及結果:

類似這樣子的協議解析實際上是有套路的,摸清楚這些套路之后以后在做類似應用的時候其實就很簡單了。重點掌握sscanf、sprintf、strcmp、strstr、strcat等函數以及上面的兩種典型例子。小編在三個地方搬過磚,每個地方都有用到類似的自定義協議,而且都形成專門的協議文檔,每次做類似通訊類的應用的時候,都會按照這樣已份協議文檔來修改以適應不同的項目。

以上就是本次分享的關于嵌入式中自定義協議的一些筆記,希望各位看官喜歡。如有錯誤,歡迎指出,謝謝!

總結

以上是生活随笔為你收集整理的上下位机通讯协议_嵌入式中自定义协议的一些典型例子的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 岳睡了我中文字幕日本 | 日本极品丰满ⅹxxxhd | www.欧美视频| 波多野结衣潜藏淫欲 | 国产精品视频合集 | 国产乱国产乱老熟 | 深夜成人福利视频 | 午夜精品免费 | 成人av亚洲 | 亚洲AV成人无码久久精品巨臀 | 亚洲综合色婷婷 | 在线国产精品视频 | 欧美日批 | 91九色在线播放 | 日本韩国在线播放 | 美日韩精品视频 | 99极品视频 | 欧美偷拍少妇精品一区 | 黄色网址大全免费 | 黄网站色 | 国产成人啪精品 | 五月天激情在线 | 毛片在线看片 | 久久嫩草视频 | 男操女视频网站 | 91久久精品日日躁夜夜躁国产 | 中文字幕在线日本 | 黄色网页免费观看 | 欧美日韩欧美日韩在线观看视频 | 成人免费看片' | 手机av资源 | 三上悠亚在线观看一区二区 | 香蕉久久夜色精品国产使用方法 | 亚洲社区在线观看 | 国产真实乱 | www.激情| 88久久精品无码一区二区毛片 | 99国产精品久久久久久久久久久 | 欧美成人三级精品 | 黑森林福利视频导航 | 午夜视频久久久 | 91视频免费视频 | 黄网站视频在线观看 | 亚洲国产精品尤物yw在线观看 | 日韩专区一区 | 黄色字幕网 | 亚洲妇熟xx妇色黄蜜桃 | 淫欲少妇 | 男男黄色片 | 韩国视频一区二区三区 | 波多野结衣欲乱上班族 | 性色视频在线 | 在线播放小视频 | a级成人毛片 | 99热这里只有精品久久 | 国产黄色片在线播放 | 日韩免费精品 | 精品乱码一区二区三四区视频 | 女~淫辱の触手3d动漫 | 欧美性俱乐部 | 美女热逼 | 4438国产精品一区二区 | 99这里有精品| 国产精品久久久久久亚洲 | 自拍视频啪 | 伊人网址| 国产三级一区 | 两性囗交做爰视频 | 超碰人人cao | 日韩黄视频 | 久久99久久99 | 日韩三级不卡 | 免费看欧美一级特黄a大片 国产免费的av | 国产视频一区二区三 | 国产精品夜夜夜爽张柏芝 | 午夜tv影院 | 精品无人区无码乱码毛片国产 | 午夜一区二区三区在线观看 | 亚洲影院在线 | 国产成人午夜 | a视频网站| 秋霞一区 | 亚洲97视频 | 日本 奴役 捆绑 受虐狂xxxx | 天天操天天射天天爱 | 大地资源中文第三页 | 欧美专区亚洲专区 | 欧美一区二区三区久久妖精 | 操日本女人 | 欧美一区二区三区四 | 日韩av免费网站 | 日本一区二区三区免费看 | 美女mm131爽爽爽免费动视频 | av片免费播放 | 精品h视频 | 99热网站| 色综合久久久久无码专区 | 黄色麻豆视频 | 国产自在线 |