硬件代理模式

嵌入式系统,特别单片机最明显的是对硬件的直接访问。基础硬件不仅有CPU,内存,键盘,传感器,通讯RS232等这样的设备。做单片机的不得不对硬件进行控制,读,写操作,而这篇文章已解决管理和操作这些硬件通常的一个模式。或许对你来说并不陌生,但是是否能够系统的,详细的表达出来这就不仅仅只是了解就能达到的。

下面讨论的设计模式已经在操作硬件上得到证明是可靠有效的。简单总结说,硬件代理模式是以封装详细信息为目的的硬件抽象的一个原型模式,它有可能改变提供给硬件或来自硬件的信息处理方法。硬件适配器模式扩展硬件代理模式,以提供支持不同硬件接口的能力。中介者支持多种硬件设备的协调,实现系统级行为。观察者模式是发布遥感数据到需要的软件元素的方法。去抖动模式和中断模式是硬件设备接口简单重用的方法。定时器模式扩展中断定时器为嵌入式系统提供精确时序。

1.1 硬件代理模式

硬件代理模式概念是对访问硬件接口的封装,限制客户直接访问硬件造成问题。

1.1.1 模式结构

模式结构非常简单,可能客户会有多个,但是每个硬件设备仅有一个硬件代理,客户只能访问代理接口,无法直接访问硬件就是这个模式的目的。

1.1.2 角色

1.1.2.1 硬件设备(HardwareDevice)

硬件设备可以是各种,内存,传感器等,包含了端口地址,内存地址,寄存器地址等等元素。与硬件代理的关联是通过软件寻址方式,对硬件的读写操作。

1.1.2.2 硬件代理(HardwareProxy)

这个是系统中的主功能。给上层应用提供的硬件访问接口,上层应用无须详细关心硬件的具体实现。基本上通常每个代理都有initialize()、configure()和disable()函数。大部分还会有对设备的值读取访问,或者写访问接口。但是一般不能随意读写,会详细到读取到最终的值。

函数包括:

access():从设备返回一个特殊值。大多数情况下,代理会对每个来自设备单独的信息提供单独的函数。例如返回传感器的温度,湿度值。

configure():提供硬件配置的方法。一般会有参数列表,通过传入参数来配置正确的工作状态。

disable()、enable():提供设备的安全禁用或开启的方法。

initialize():用于第一次启动时候的初始化硬件。

mutate():用于向设备写入数据,通常总是有一个或更多的输入参数。

marshal()、unmarshal():这两个为私有函数,用于把客户数据格式转为硬件所需格式,后者相反,把硬件原始数据格式转换为客户格式。常用于加密解密,压缩解压缩等。

deviceAddr:是一个私有变量,提供底层直接访问硬件的地址。必须隐藏在代理中,不能给客户访问的机会,所以特别注意到一些接口,是否会通过了指针把该变量暴露出去。

1.1.2.3 代理客户(ProxyClient)

客户代码调用硬件代理服务来访问硬件设备。

1.1.3 效果

该模式非常普遍并且具有封装硬件接口以及编码系统的所有优点。这为不对客户端进行任何改变而从根本上改变实际硬件接口提供了灵活性。基本上所有的硬件设备都能用此模式搭建,注意的是不能暴露细节,只能返回一个最后的结果,特别在读写操作,否则就不具备有封装性了。

1.1.4 实现

可以有很多不同方法用C语言实现,最常见的是如linux驱动,使用结构体里的函数指针统一硬件的接口。然后在具体的硬件设备上实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值