访问硬件的设计模式
链接:https://pan.baidu.com/s/1F88xG7n67z_vzDgHvUseog
提取码:1234
〇、访问硬件的基本概念
软件可以访问的硬件可以分成四种:基础设施(cpu,内存,存储设备,定时器,输入设备,输出设备,端口,中断...)、通信(RS485、RS232、以太网、USB、802.11x、DMA...)、传感器(使用电子机械或化学方法检测物理现象的状态)和致动器(发动机、暖风机、水泵、发电机和交换器...)。通常会经过四个步骤:初始化、测试、配置、执行。主要有以下7种:
1.硬件代理模式:将硬件封装到类或者结构体中
2.硬件设配器模式:使需要的和提供的接口相适应
3.中介者模式:协调复杂的交互
4.观察者模式:支持高效数据分布
5.去抖模式:抑制间歇硬件信号
6.中断模式:处理高紧急硬件信号
7.轮询模式:定期检测新数据
一、硬件代理模式:将硬件封装到类或者结构体中
1.抽象:包含尽可能完整的硬件操作,这里指的是读写数据,初始化,配置,开关。关键提倡易于修改。
2.问题:需要隐藏位编码、加密和压缩,这些内部私有化。
3.模式结构:合理利用void,需要有私有方法、公有函数和数据单元。
4.协作角色:物理设备,代码,去调用代码的人。代码中主要的方法应该包含以下
access:公有,返回需要的数据。
configure:公有,配置硬件的方法。
disable:公有,设备安全开关。
deviceAddr:私有,直接访问硬件。
initialize:公有,初始化。这里尽量避免传入参数。
marshal:私有,访问内部其他方法,提供影藏加密压缩包装的作用。
mutate:公有,写入操作
unmarshal:私有,返回给用户之前,需要对设备中获取的数据解码,解包和解压等。
5.效果:降低了操作硬件的灵活性,因此需要合理隐藏方法和开放接口。往往操作原始格式的数据是最高效的,隐藏编码细节降低了可维护性。
6.策略:这里有一个多态的概念。在同一套系统中,需要考虑一个方法可以完成多个设备操作,甚至是多种。
7.实例:参考马达系统的设计模式。
8.小结
该模式简单的实现不能实现任何线程安全性。可以和临界区模式、守卫调用模式或队列模式组合使用提供线程安全性。为了避免死锁,可以和排序锁定模式和同时锁定模式组合使用。
二、硬件设配器模式:使需要的和提供的接口相适应
1.抽象:一种方法可以满足已经存在的硬件接口能适应应用期望。
2.问题:不同的硬件之间往往有相似的接口,在满足语义和不影响性能情况下,尽可能做到一段代码适配多种硬件。
3.模式结构:可以理解成多了一张列表来维护。
4.协作角色:硬件适配,用户,接口适配,硬件及硬件操作。
5.效果:一段代码,换个硬件不需要改动还是可以完美适配。重用性。
6.策略:考虑多态和继承。
7.实例:参考多类型传感器的设计模式。
8.小结
该模式介于硬件代理和用户调用之间。(和虚拟内存的原理相似,但具体很不相同)
三、中介者模式:协调复杂的交互
1.抽象:硬件元素必须按照确定且复杂的方式协调的时候,提供了复杂交互协调的一种方法。将复杂的硬件操作时向上提供简洁的接口。
2.问题:比如控制运动手臂,不需要协调细节,但需要提供完整的协调,也就是说,让手臂到指定位置,做某种动作,并不需要关心内部的制动器是怎么转的,这里没必要向上提供。
3.模式结构:一组动作有一个方法提供,隐藏某些细节。
4.协作角色:用户,中介者,具体合作的一系列操作。
5.效果:直接调用中介的方法,不需要直接耦合硬件操作。降低耦合并在单个集合汇总的协作极大的简化的整体设计。
这就需要考虑具体的了,控制高精度的时间成本,包括响应,通信,致动,重点考虑制动器和多中介间以及多中介本身之间。
6.策略:中介者必须能够连接到每个具体的操作者。考虑指针数组。
7.实例:《Design Patterns》和《Readl-Time Design Patterns》中的架构格局模式相似。具体参考机器人的设计模式。
8.小结
当你需要隐藏中介者时候,可以考虑观察者模式和中介者直接连接。具体的操作分组分类是一件很有必要的事,大部分时候向上提供公有接口。这里需要注意有多个合作者的情况。
四、观察者模式:支持高效数据分布
1.抽象:提供一种方法使对象“监听”其他对象。
2.问题:也就是,发布-订阅。
3.模式结构:和现实生活中订阅公众号一个逻辑,客户可以取消订阅,也可以订阅,消息却是服务器发出的,也可以理解成客户端选择性屏蔽。
4.协作角色:客户端,服务端,客户端感兴趣的数据元。
5.效果:在设计时还不明确的客户分发数据的过程,并且在运行时动态的管理感兴趣客户列表
6.策略:通知句柄的管理。(C语言的话需要用到链表)
7.实例:观察者模式和硬件代理模式或者硬件适配器模式中非常常见。
8.小结:
个人理解:这个模式其实是客户端被动接受消息,主动发起订阅,而服务端被动接受订阅,主动发布消息。
五、去抖模式:抑制间歇硬件信号
1.抽象:开关、按钮和继电器等都是电子系统的输入设备,
2.问题:电信号间歇性跳跃应该怎么处理?
3.模式结构:接受初始事件,等到震动减弱,然后对他的状态进行数据源取样。
4.协作角色:事件接受者,硬件,去抖逻辑,定时器。
5.效果:方便用户只关注硬件状态变化中真实需要的部分。
6.策略:设备主动使用中断向量来联系客户,另一种是延时后取样(需要联调降低误差),甚至可以把这个延时利用起来,运行其他程序。
7.实例:中断模式可以很好一你该用在去抖模式中,或者使用超时状态机。
8.小结
用于消除来自金属表面间歇连接引起的多个假事件,其实就是降噪的过程。
六、中断模式:处理高紧急硬件信号
1.抽象:中断模式是一种构建系统的方法。往往中断可以被中断。
2.问题:优先级控制。
3.模式结构:基本上这里的中断句柄没有参数,可以增加效率。
4.协作角色:中断服务程序(注册和注销服务),中断向量表,触发事件。
5.效果:
6.策略
7.实例
8.小结
物理世界从根本山还说是并发与异步的,也是非线性的。
七、轮询模式:定期检测新数据
1.抽象
2.问题
3.模式结构
4.协作角色
5.效果
6.策略
7.实例
8.小结