色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > C語言設計模式——硬件代理

C語言設計模式——硬件代理 時間:2018-09-28      來源:未知

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. 效果

硬件代理模式非常簡單,具有封裝硬件接口,以及屏蔽硬件編碼細節的優點。

可以實現不改變用戶代碼,只修改硬件代理的細節,就可以從根本上改變具體硬件,提供了非常好的靈活性。因為硬件的操作細節都被封裝到了硬件代理的具體方法里,用戶代碼只需要直接調用硬件代理提供的函數接口,就可以實現對設備的操作。

上一篇:Linux信號基礎

下一篇:用QT實現整體換膚

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 无码三级香港经典三级在线视频 | 糟蹋小少妇17p | 免费A级毛片无码A∨中文字幕 | 免费无码AV片在线观看中文 | 欧美性色黄大片 | 国产精品无码一级毛片 | 精品久久久久久无码专区不卡 | 粗大挺进尤物人妻中文字幕 | 色综合久久久无码中文字幕波多 | 东京热AV人妻无码A片 | 亚洲AV成人无码一二三在线观看 | 亚洲AV午夜福利精品一区二区 | 97国产大学生情侣在线视频 | 国产十八禁真成了 | 久久婷婷国产综合精品 | 在线精品高清中文字幕 | 国产精品久久人妻无码hd | 青青草十七色 | 国产人妻精品无码AV | 天天爽天天爽天天爽 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 夜鲁鲁鲁夜夜综合视频欧美 | 国内精品自在自线视频 | 亚洲乱码AV中文一区二区 | 国产精品不卡一卡二卡 | 国产精品黑色丝袜在线观看 | 人妻精品动漫h无码中字 | 国产美女高潮流白浆免费观看 | 国内成人精品福利网站 | 日本一级在线观看 | 女人被啪呻吟AAA级毛片 | 四虎影院免费在线 | 97久久人人超碰超碰窝窝 | 精品国精品国产自在久国产不卡 | 囯产香蕉97碰碰碰视频在线观看 | 午夜福利18以下勿进 | 久久婷婷五月综合色99啪 | 亚洲成a人片在线观看你懂的 | 中文字幕の友人北条麻妃 | 无码av波多野结衣 | 国产精品成人A片在线果冻 国精产品一线二线三线AV |