Hi,欢迎来到中国优发娱乐手机版高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
  • 全国咨询热线:400-611-6270
  • 新浪微博
  • 微信
  • 北京
    校区
  • 上海
    校区
  • 深圳
    校区
  • 成都
    校区
  • 南京
    校区
  • 武汉
    校区
  • 西安
    校区
  • 广州
    校区
  • 沈阳
    校区
  • 济南
    校区
  • 重庆
    校区
  • 长沙
    校区
  • 研发
    中心
  • 当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > C语言设计模式——硬件代理
    C语言设计模式——硬件代理
    时间:2017-05-19作者:华清远见
    1. 抽象 硬件代理模式使用结构体封装硬件设备,硬件有可能是内存、传感器设备、IO设备等,但无论什么样的设备,硬件代理的作用就是隐藏硬件的操作细节,向客户应用程序提供初始化、配置、读写数据、打开与关闭等操作的编程接口。 2. 解决的问题 如果每个用户程序都直接在程序中访问操作底层硬件,当更换了相同功能的不同硬件设备时,有可能硬件接口并不一致,而且对硬件的操作与控制方式也并不一样,这种情况下,就要修改每一个用户程序,导致程序不容易维护。 通过提供位于实际硬件与用户程序之间的代理,就可以极大程度避免因为更换硬件而影响程序的设计,有效减少对程序的修改。 为了方便维护,客户程序可以不用关心设备的具体通信细节,这些细节都要在硬件代理的内部私有方法中实现。 3. 模式结构 硬件代理模式的基本组成结构图表示如下: 图 硬件代理模式   4. 协作角色 4.1. 硬件设备 硬件设备描述了实际的硬件,所以不会为这个元素编写C语言代码,放在图里只是为了方便理解。 硬件设备和代理之间的关系就是通过通信端口、内存地址映射或者中断等方式互相关联起来。 4.2. 硬件代理 这个是设计模式中最主要的部分,也是一个最主要的类。 其中包含了描述设备所使用的数据,以及操作设备的时候可以使用的函数。 以上图为例,这个硬件代理包含了一个void类型的变量hardware,用来描述设备的属性,这里为了方便表达,使用了void类型,实际应用的时候,会使用相应的类型,包括基本类型和组合类型(结构体、联合体),但是多数情况下硬件代理使用结构体会比较多一点。这些数据属性也可以叫做“类属性”。 除了数据属性,硬件代理里面还定义了如下函数: init()  ——多用于对硬件设备的初始化操作 open() ——用于对设备的打开操作 close() ——用于关闭设备 read() ——用于从设备中读取数据 write() ——用于往设备写数据   这里定义的函数仅仅是为了方便理解,实际应用的时候,根据不同的硬件所支持的不同操作,定义不同的函数,这些函数也可以叫做“类方法”。 在C语言中,类的定义与使用需要一定的构造技巧,类的声明使用.h头文件封装,类方法的定义使用.c源文件进行封装。 上图所表示的HWProxy代理就可以用如下两个文件来描述: HWProxy.h文件: /****************************************************  *  HWProxy.h                                           *  Created on: 03-五月-2017 下午 5:19:38                        *  Implementation of the Class HWProxy         *  Original author: LvXin                       ****************************************************/   #ifndef _HWProxy_H    #define _HWProxy_H     #ifdef __cplusplus extern "C" { #endif   typedef struct HWProxy HWProxy_t; struct HWProxy { void hardware; };     int close (HWProxy_t *me); int init (HWProxy_t *me); int open (HWProxy_t *me); int read (HWProxy_t *me); int write (HWProxy_t *me, int data);     #ifdef __cplusplus } #endif     #endif /*!defined(_HWProxy_H)*/     HWProxy.c文件: /****************************************************  *  HWProxy.c                                           *  Created on: 03-五月-2017 下午 5:19:38                        *  Implementation of the Class HWProxy         *  Original author: LvXin                       ****************************************************/   #include "HWProxy.h"   int close(HWProxy_t *me) { return 0; }   int init(HWProxy_t *me) { return 0; }   int open(HWProxy_t *me) { return 0; }   int read(HWProxy_t *me) { return 0; }   int write(HWProxy_t *me, int data) { return 0; }     这是一个最简单的硬件代理的框架,这里要强调的是所有的对外开放的声明,指示类的东西全都要放在.h文件中,而所有定义类的东西,比如静态变量、函数定义等,全都要放在.c文件中。私有的数据或者方法要用static做限定,并且不要放在.h文件里。 5. 效果 硬件代理模式非常简单,具有封装硬件接口,以及屏蔽硬件编码细节的优点。 可以实现不改变用户代码,只修改硬件代理的细节,就可以从根本上改变具体硬件,提供了非常好的灵活性。因为硬件的操作细节都被封装到了硬件代理的具体方法里,用户代码只需要直接调用硬件代理提供的函数接口,就可以实现对设备的操作。

    发表评论
    全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966 在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497) 企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300) Copyright 2004-2017 华清远见教育集团 版权所有 ,沪ICP备10038863号,京公海网安备110108001117号

    优发娱乐手机版

    百度360搜索搜狗搜索

    优发娱乐手机版

    百度360搜索搜狗搜索