嵌入式框架
一 表驱动法:从lcd液晶菜单提炼出的驱动结构,自定义结构体(回调函数,处理及流转)菜单结构,然后静态的结构体数组表示不同页面。但静态数组不能动态增减,于是就有了变体链表结构,但链表的遍历很慢(没有数组下标快),所以进一步的就有了链接式。
二 RIL(Radio Interface Layer)款专门为嵌入式平台开发的无线通信模组(GSM/GPRS/CatM1/NB-Iot)管理软件,目前已支持EC21、BG96、 HL8518等模组,内置常用组件,如带断点续传功能的HTTP文件下载、TFTP传输、MQTT等
三 BabyOS,一个开源驱动设备管理框架
四 嵌入式设计的设计模式:上,
23种设计模式偏向于可复用的面向对象的软件,而结构化嵌入式C语言,可强制封装结构体实现类似效果,选择合适的设计模式或代码框架,将复杂软件解耦或者分层,提高代码复用度和可扩展性便于维护,当然,代价是对资源和实时性的损耗。关于线程安全(增加加临界区或者队列保护)。
硬件访问类的设计模式:主要是考虑硬件器件的更换与兼容,对业务层的封装和隔离.
- 代理模式:类似Linux的驱动框架(通过ops操作接口(初始化,打开,关闭。读,写,配置,控制(cmd-para)),应用层采用统一的posix接口,底层直接进行ops对接,不为因为硬件型号变化函数名等需要改变内容需要重写。
1 typedef struct 2 { 3 *init; 4 *open; 5 *close; 6 }gsensor_ops_t; 7 8 gsensor_ops_t bma425; 9 gsensor_ops_t sc7a20; 10 gsensor_ops_t* p_gsensor_ops;
- 硬件适配器模式一般用在硬件器件更换,或者软件跨平台移植:用宏进行配置(应用的配置量用宏表示,而其具体值是代替不同分类的另外宏。
- 中介者模式(Mediator Pattern)提供一个中介类,协调处理不同类之间的通信,各子类之间不直接通信(优点可降低多个元素之间的通信复杂性松耦合,使代码易于维护;缺点随着合作者数量的增加会变得复杂难以维护,中介者代码庞大):中介包含各个合作者及决策;合作者指定属于那个中介,并有收发信息2个操作
- 观察者模式:比较类似发布--订阅模式,服务器只需要周期更新数据,众多关注该数据的观察者,每当数据更新就进行指定的动作。适合于将传感器采样或者某些周期更新的数据,转发给关注它的元素。具体实现就是:定义结构体成员为一个函数指针,众多的观察者就是结构体数组,订阅就是将具体的操作函数赋给结构体数组的某个成员,取消订阅就是将数组成员赋值为null.服务器发布更新就是执行具体的各个成员回调函数。
- 消抖过滤模式:类似按键处理,去除干扰,识别抖动和具体的按键动作区分。
- 中断模式:进行异步响应
- 轮询模式:速度匹配,主要用于周期性的变化,或者变化很缓慢的状态,定时器轮询是特殊的中断-查询模式(譬如状态机)。
并发下的模式(OS提供):
- 临界区模式:消除竞争,保护的不是任务而是资源。但注意不能长时间垄断。
- 守卫模式:共享资源的申领使用方式,令牌锁
- 队列缓冲模式:消除生产消费方式按共享资源操作造成的冲突,具有动作的延迟缓交,按顺序执行,但也有类似紧急处理的插入队列头的操作
- 汇合模式:事件组/集,进行按事件的逻辑运算决定是否执行。
- 信号:异步类似中断
- 完成量:有先后顺序