越來(lái)越多的硬件產(chǎn)品,硬件構(gòu)成不僅僅是集成在一塊板子上,而是多塊控制板協(xié)同工作。
此時(shí),就會(huì)涉及到多塊板之間的通信(有線/無(wú)線通信),就會(huì)涉及到到通信協(xié)議。很多時(shí)候,我們都會(huì)自定義一些協(xié)議。
我們之前在也分享一種常用的自定義協(xié)議格式:
分享一種靈活性很高的協(xié)議格式(附代碼例子)

在多板系統(tǒng)中,會(huì)有以下這些應(yīng)用場(chǎng)景:
每塊板都有OTA升級(jí)的需求。
可能某塊板是一塊公共的板子,其它項(xiàng)目也會(huì)同時(shí)使用,這塊公共板子軟件需要同時(shí)兼容多個(gè)項(xiàng)目。
我們?cè)谲浖^(guò)程中,可能會(huì)涉及到板間交互的數(shù)據(jù)的升級(jí),比如新增數(shù)據(jù)。
新增的某個(gè)數(shù)據(jù)屬性上屬于某個(gè)數(shù)據(jù)集合,比如與某個(gè)結(jié)構(gòu)體是同類數(shù)據(jù),理論上為了程序設(shè)計(jì)得更合理些,應(yīng)該把這個(gè)數(shù)據(jù)加在已有的結(jié)構(gòu)體里面。
但是,這可能會(huì)涉及到兼容性問題。
如果直接往結(jié)構(gòu)體里新增數(shù)據(jù),升級(jí)時(shí),有些板子升級(jí)成功了,有些板子沒升級(jí)成功??赡芫蜁?huì)出現(xiàn)數(shù)據(jù)異常導(dǎo)致功能異常。
公共板升級(jí)新增協(xié)議之后,可能就不能完全兼容與其通信的板子。
比如,有一條數(shù)據(jù)叫做設(shè)備信息的數(shù)據(jù)需要在板間通信,設(shè)備信息里包含了:設(shè)備IP、設(shè)備Mac。
#defineMSG_ID_DEV_INFO0x0001
typedefstruct_dev_info
{
chardev_ip[IP_MAX_LEN];
chardev_mac[MAC_MAX_LEN];
}dev_info_t;
此時(shí),有新需求需要再加一個(gè)設(shè)備的sn,這個(gè)數(shù)據(jù)我們應(yīng)該如何加?
如果是項(xiàng)目前中期,這時(shí)候還是在開發(fā)階段,我們可以隨意修改。因?yàn)樵O(shè)備sn也是設(shè)備信息的一部分,可以直接在設(shè)備信息這個(gè)數(shù)據(jù)里添加會(huì)比較合理:
#defineMSG_ID_DEV_INFO0x0001
typedefstruct_dev_info
{
chardev_ip[IP_MAX_LEN];
chardev_mac[MAC_MAX_LEN];
chardev_sn[SN_MAX_LEN];
}dev_info_t;
如果是項(xiàng)目后期,或已經(jīng)上市流通,則就需要考慮兼容性問題了。
針對(duì)這種兼容性問題,有如下解決方案:
方案一:新增的數(shù)據(jù)單獨(dú)走一條數(shù)據(jù)協(xié)議
比如針對(duì)以上例子,可以這么來(lái)擴(kuò)展:
#defineMSG_ID_DEV_INFO0x0001
#defineMSG_ID_DEV_SN0x0002
typedefstruct_dev_info
{
chardev_ip[IP_MAX_LEN];
chardev_mac[MAC_MAX_LEN];
}dev_info_t;
typedefstruct_dev_sn
{
chardev_sn[SN_MAX_LEN];
}dev_sn_t;
這種方案雖然能解決問題,但越到后面,程序會(huì)越來(lái)越亂,各種數(shù)據(jù)很散亂,很不好維護(hù)。
而且,一開始也不可能把所有數(shù)據(jù)都規(guī)劃得很完美。有沒有什么方法,可以比較合理地?cái)U(kuò)充數(shù)據(jù),并且也能應(yīng)對(duì)這種兼容性問題。
看一下方案二。
方案二:項(xiàng)目設(shè)計(jì)初期,引入一些數(shù)據(jù)序列化庫(kù)。
比如protobuf。
Protocol Buffers,是Google公司開發(fā)的一種數(shù)據(jù)描述語(yǔ)言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化,可用于數(shù)據(jù)存儲(chǔ)、通信協(xié)議等方面。它不依賴于語(yǔ)言和平臺(tái)并且可擴(kuò)展性極強(qiáng)。
同XML相比,Protocol buffers在序列化結(jié)構(gòu)化數(shù)據(jù)方面有許多優(yōu)點(diǎn):
消息格式升級(jí)和兼容性好
支持跨平臺(tái)多語(yǔ)言
序列化反序列化速度很快
序列化后體積相比Json和XML很小,適合網(wǎng)絡(luò)傳輸
相關(guān)文章:
Protobuf:一種更小、更快、更高效的協(xié)議
干貨 | 項(xiàng)目乏力?nanopb助你一臂之力
干貨 | protobuf-c之嵌入式平臺(tái)使用
如何利用Google的protobuf,來(lái)實(shí)現(xiàn)自己的RPC框架
針對(duì)上面的例子,使用protobuf。
原來(lái)的數(shù)據(jù):
syntax="proto2";
messagedev_info
{
requiredstringdev_ip=1;
requiredstringdev_mac=2;
}
新增數(shù)據(jù)dev_sn直接新增即可:
syntax="proto2";
messagedev_info
{
requiredstringdev_ip=1;
requiredstringdev_mac=2;
requiredstringdev_sn=3;
}
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5186文章
20151瀏覽量
328917 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1073瀏覽量
41869 -
硬件產(chǎn)品
+關(guān)注
關(guān)注
0文章
6瀏覽量
1696
原文標(biāo)題:嵌入式中,升級(jí)時(shí)涉及的協(xié)議兼容性問題?
文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
HDMI的接口匹配問題(花屏、與不同電視兼容性問題等)
如何解決印制板設(shè)計(jì)上的電磁兼容性問題?
東元電機(jī)F系列產(chǎn)品升級(jí)說(shuō)明
電子、電氣設(shè)備中的電磁兼容性問題
PC顯卡急需解決的HDCP兼容性問題
大聯(lián)大推出智能家居整體解決方案,未來(lái)產(chǎn)品升級(jí)時(shí)無(wú)需考慮兼容性
PFC設(shè)計(jì)的電磁兼容性問題與解決方法 (10.1)
PFC設(shè)計(jì)的電磁兼容性問題與解決方法 (10.3)
PFC設(shè)計(jì)的電磁兼容性問題與解決方法 (10.2)

硬件產(chǎn)品升級(jí)時(shí)的兼容性問題
評(píng)論