硬件产品升级时的兼容性问题

越来越多的硬件产品,硬件构成不仅仅是集成在一块板子上,而是多块控制板协同工作。
此时,就会涉及到多块板之间的通信(有线/无线通信),就会涉及到到通信协议。很多时候,我们都会自定义一些协议。
我们之前在也分享一种常用的自定义协议格式:
分享一种灵活性很高的协议格式(附代码例子)
在多板系统中,会有以下这些应用场景:
每块板都有ota升级的需求。
可能某块板是一块公共的板子,其它项目也会同时使用,这块公共板子软件需要同时兼容多个项目。
我们在软件迭代过程中,可能会涉及到板间交互的数据的升级,比如新增数据。
新增的某个数据属性上属于某个数据集合,比如与某个结构体是同类数据,理论上为了程序设计得更合理些,应该把这个数据加在已有的结构体里面。
但是,这可能会涉及到兼容性问题。
如果直接往结构体里新增数据,升级时,有些板子升级成功了,有些板子没升级成功。可能就会出现数据异常导致功能异常。
公共板升级新增协议之后,可能就不能完全兼容与其通信的板子。
比如,有一条数据叫做设备信息的数据需要在板间通信,设备信息里包含了:设备ip、设备mac。
#define  msg_id_dev_info   0x0001typedef struct _dev_info{ char dev_ip[ip_max_len]; char dev_mac[mac_max_len];}dev_info_t;  
此时,有新需求需要再加一个设备的sn,这个数据我们应该如何加?
如果是项目前中期,这时候还是在开发阶段,我们可以随意修改。因为设备sn也是设备信息的一部分,可以直接在设备信息这个数据里添加会比较合理:
#define  msg_id_dev_info   0x0001typedef struct _dev_info{ char dev_ip[ip_max_len]; char dev_mac[mac_max_len]; char dev_sn[sn_max_len];}dev_info_t;  
如果是项目后期,或已经上市流通,则就需要考虑兼容性问题了。
针对这种兼容性问题,有如下解决方案:
方案一:新增的数据单独走一条数据协议
比如针对以上例子,可以这么来扩展:
#define  msg_id_dev_info   0x0001#define  msg_id_dev_sn     0x0002typedef 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;  
这种方案虽然能解决问题,但越到后面,程序会越来越乱,各种数据很散乱,很不好维护。
而且,一开始也不可能把所有数据都规划得很完美。有没有什么方法,可以比较合理地扩充数据,并且也能应对这种兼容性问题。
看一下方案二。
方案二:项目设计初期,引入一些数据序列化库。
比如protobuf。
protocol buffers,是google公司开发的一种数据描述语言,类似于xml能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。
同xml相比,protocol buffers在序列化结构化数据方面有许多优点:
消息格式升级和兼容性好
支持跨平台多语言
序列化反序列化速度很快
序列化后体积相比json和xml很小,适合网络传输
相关文章:
protobuf:一种更小、更快、更高效的协议
干货 | 项目乏力?nanopb助你一臂之力
干货 | protobuf-c之嵌入式平台使用
如何利用google的protobuf,来实现自己的rpc框架
针对上面的例子,使用protobuf。
原来的数据:
syntax = proto2; message dev_info{    required string dev_ip    = 1;    required string dev_mac   = 2;}  
新增数据dev_sn直接新增即可:
syntax = proto2; message dev_info{    required string dev_ip    = 1;    required string dev_mac   = 2;    required string dev_sn    = 3;}  


手持式水质检测仪的检测原理及其特点介绍
首尔半导体Acrich MJT LED创新解决方案
基于移动通信技术的城市停车诱导信息系统设计方案
华为任正非敲响警钟:金融危机即将到来
2020高工移动机器人产业峰会将在杭州举行
硬件产品升级时的兼容性问题
中兴通讯:共筑5G产业创新之路
光影时尚大片也能DIY?这样自拍突破脑洞异次元
华为公布全新品牌“非凡大师”!MatePad 13.2等新品亮相,两款秘密新车剧透
智慧安全用电监控系统公司_电猫猫_闽泰科技陕西分公司
亿光量产的头灯用LED已打入欧美一级车厂 盼能一举提升在汽车照明的市占率
T3S2系列mesh自组网电台速率测试
Admix宣布与Somnium Space合作开发Oasis 让用户在不离开应用程序的情况下跨越不同的VR世界
在城市形象展示中,怎么规范安装oled拼接屏?
华为两款真全面屏手机专利曝光
化工园区空气监测站的技术参数介绍
运营商的时代之旅:种下5.5G的魔豆,攀上数字化的天空花园
不能忽略的LED显示屏省电常识
隔离式双向I2C收发器的应用及特性的介绍
人工智能的发展是否一直很顺利