引言??????
目前也做了不少工业协议了,做得比较好的比如JS1939B,MB_RTU_TCP。已经算是标准件了。???????所以分享点自己的心得。
封装中间件的关键点??????
- 要考虑在单个程序中的可重用性。
可以采取C++的方式封装代码,这样就可以不考虑重入问题了。
也可以把所有影响重入性的因素踢出到中间件之外。通常这是很难的,而且会提高维护复杂性,你不得不捆绑着可重入性、兼容之前应用(接口不可大动)的两个脚镣前进 - 要考虑协议本身的状态机制,采取异步模式。
通常协议栈需要很多个状态机,但是它可以跟APP异步,也就是可以引入队列。 - 嵌入式系统尽量把中间件的数据区跟APP、Driver公用。
单个通信设备通常只挂载一个任务,不存在竞争关系。 - 要有一致性的编程思路:
比如modbus,每个功能码的处理其实都差不多,要抽象出统一性,然后再添加个性化的处理 - 要尽降低自己的维护成功。
如今是个内存白菜价的时代,处理器通常不缺那么一丢丢内存。比如我吧modbus-rtu和modbus-tcp完全封装在一起,结果不仅仅减少了维护成本,后续还果断遇到了串口和网口同时用的场景。????
注意事项???????
- 不要排斥指针,要好好利用它。
- 不要被强数据类型捆绑,要精通数据类型转化
真正的C大神可以叫做指针和数据类型转化大神