加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式中,升級時涉及的協(xié)議兼容性問題?

01/11 10:50
2214
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是雜燴君。

越來越多的硬件產(chǎn)品,硬件構(gòu)成不僅僅是集成在一塊板子上,而是多塊控制板協(xié)同工作。

此時,就會涉及到多塊板之間的通信(有線/無線通信),就會涉及到到通信協(xié)議。很多時候,我們都會自定義一些協(xié)議。

我們之前在也分享一種常用的自定義協(xié)議格式:分享一種靈活性很高的協(xié)議格式(附代碼例子)

在多板系統(tǒng)中,會有以下這些應(yīng)用場景:

    每塊板都有OTA升級的需求??赡苣硥K板是一塊公共的板子,其它項目也會同時使用,這塊公共板子軟件需要同時兼容多個項目。

我們在軟件迭代過程中,可能會涉及到板間交互的數(shù)據(jù)的升級,比如新增數(shù)據(jù)。

新增的某個數(shù)據(jù)屬性上屬于某個數(shù)據(jù)集合,比如與某個結(jié)構(gòu)體是同類數(shù)據(jù),理論上為了程序設(shè)計得更合理些,應(yīng)該把這個數(shù)據(jù)加在已有的結(jié)構(gòu)體里面。

但是,這可能會涉及到兼容性問題。

如果直接往結(jié)構(gòu)體里新增數(shù)據(jù),升級時,有些板子升級成功了,有些板子沒升級成功。可能就會出現(xiàn)數(shù)據(jù)異常導(dǎo)致功能異常。

公共板升級新增協(xié)議之后,可能就不能完全兼容與其通信的板子。

比如,有一條數(shù)據(jù)叫做設(shè)備信息的數(shù)據(jù)需要在板間通信,設(shè)備信息里包含了:設(shè)備IP、設(shè)備Mac。

#define??MSG_ID_DEV_INFO???0x0001

typedef?struct?_dev_info
{
?char?dev_ip[IP_MAX_LEN];
?char?dev_mac[MAC_MAX_LEN];
}dev_info_t;

此時,有新需求需要再加一個設(shè)備的sn,這個數(shù)據(jù)我們應(yīng)該如何加?

如果是項目前中期,這時候還是在開發(fā)階段,我們可以隨意修改。因為設(shè)備sn也是設(shè)備信息的一部分,可以直接在設(shè)備信息這個數(shù)據(jù)里添加會比較合理:

#define??MSG_ID_DEV_INFO???0x0001

typedef?struct?_dev_info
{
?char?dev_ip[IP_MAX_LEN];
?char?dev_mac[MAC_MAX_LEN];
?char?dev_sn[SN_MAX_LEN];
}dev_info_t;

如果是項目后期,或已經(jīng)上市流通,則就需要考慮兼容性問題了。

針對這種兼容性問題,有如下解決方案:

方案一:新增的數(shù)據(jù)單獨走一條數(shù)據(jù)協(xié)議

比如針對以上例子,可以這么來擴展:

#define??MSG_ID_DEV_INFO???0x0001
#define??MSG_ID_DEV_SN?????0x0002

typedef?struct?_dev_info
{
?char?dev_ip[IP_MAX_LEN];
?char?dev_mac[MAC_MAX_LEN];
}dev_info_t;

typedef?struct?_dev_sn
{
????char?dev_sn[SN_MAX_LEN];
}dev_sn_t;

這種方案雖然能解決問題,但越到后面,程序會越來越亂,各種數(shù)據(jù)很散亂,很不好維護(hù)。

而且,一開始也不可能把所有數(shù)據(jù)都規(guī)劃得很完美。有沒有什么方法,可以比較合理地擴充數(shù)據(jù),并且也能應(yīng)對這種兼容性問題。

看一下方案二。

方案二:項目設(shè)計初期,引入一些數(shù)據(jù)序列化庫。

比如protobuf。

Protocol Buffers,是Google公司開發(fā)的一種數(shù)據(jù)描述語言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化,可用于數(shù)據(jù)存儲、通信協(xié)議等方面。它不依賴于語言和平臺并且可擴展性極強。

同XML相比,Protocol buffers在序列化結(jié)構(gòu)化數(shù)據(jù)方面有許多優(yōu)點:

消息格式升級和兼容性好

    支持跨平臺多語言序列化反序列化速度很快序列化后體積相比Json和XML很小,適合網(wǎng)絡(luò)傳輸

相關(guān)文章:

Protobuf:一種更小、更快、更高效的協(xié)議

干貨 | 項目乏力?nanopb助你一臂之力

干貨 | protobuf-c之嵌入式平臺使用

如何利用Google的protobuf,來實現(xiàn)自己的RPC框架

針對上面的例子,使用protobuf。

原來的數(shù)據(jù):

syntax?=?"proto2";
?
message?dev_info
{
????required?string?dev_ip????=?1;
????required?string?dev_mac???=?2;
}

新增數(shù)據(jù)dev_sn直接新增即可:

syntax?=?"proto2";
?
message?dev_info
{
????required?string?dev_ip????=?1;
????required?string?dev_mac???=?2;
????required?string?dev_sn????=?3;
}

以上就是本次的分享,歡迎收藏、轉(zhuǎn)發(fā)!

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
XRCGB25M000F3A00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 25MHz Nom, ROHS AND REACH COMPLIANT, SMALL, SMD, 3 PIN

ECAD模型

下載ECAD模型
$0.34 查看
M25P05-AVMN6P 1 Rochester Electronics LLC 64KX8 FLASH 2.7V PROM, PDSO8, 0.150 INCH, ROHS COMPLIANT, PLASTIC, SOP-8
$0.79 查看
S29GL256P10FFI020 1 AMD Flash, 16MX16, 100ns, PBGA64,
$9.29 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!