久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

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

1. 抽象

硬件代(dai)理模式使(shi)用(yong)結構(gou)體封(feng)裝硬件設備,硬件有可能是內存、傳感(gan)器設備、IO設備等,但無(wu)論什么(me)樣的(de)設備,硬件代(dai)理的(de)作(zuo)用(yong)就(jiu)是隱藏硬件的(de)操作(zuo)細節,向客戶應用(yong)程序提供初始化、配(pei)置、讀寫數(shu)據、打開(kai)與關閉等操作(zuo)的(de)編程接(jie)口。

2. 解決的問題

如果(guo)每個用戶(hu)程(cheng)(cheng)(cheng)序都(dou)直接在程(cheng)(cheng)(cheng)序中訪問操(cao)作底層硬(ying)(ying)件,當(dang)更(geng)換(huan)了相同功能的不同硬(ying)(ying)件設備時,有可能硬(ying)(ying)件接口并不一(yi)致,而且對(dui)硬(ying)(ying)件的操(cao)作與控制方式(shi)也(ye)并不一(yi)樣,這(zhe)種情況下,就(jiu)要修改每一(yi)個用戶(hu)程(cheng)(cheng)(cheng)序,導致程(cheng)(cheng)(cheng)序不容(rong)易維護。

通過提供位于實際硬件(jian)與用戶程序(xu)之間(jian)的代理(li),就可以(yi)極大程度避免(mian)因為更換硬件(jian)而影響程序(xu)的設計,有效(xiao)減少對程序(xu)的修(xiu)改(gai)。

為了方便維護,客戶程序可以不用關心設備的具體(ti)通信(xin)細(xi)節,這(zhe)些細(xi)節都要在(zai)硬件代理(li)的內(nei)部私有方法中實現。

3. 模式結構

硬件(jian)代(dai)理模(mo)式的基(ji)本組成結構圖(tu)表示如下:

圖 硬件(jian)代理模式

 

4. 協作角色

4.1. 硬件設備

硬件設備描述了(le)實際的硬件,所以不會為(wei)(wei)這個元素編寫(xie)C語言代碼,放(fang)在圖里只是為(wei)(wei)了(le)方便理解。

硬件設備(bei)和代理(li)之間的關系(xi)就是通(tong)過通(tong)信端口、內存地址映射或者中斷等方式互相關聯起來。

4.2. 硬件代理

這(zhe)個(ge)是(shi)設(she)計(ji)模(mo)式中主要的部分,也是(shi)一個(ge)主要的類。

其中包(bao)含了描述(shu)設備(bei)(bei)所使(shi)(shi)用的(de)數據,以及操作設備(bei)(bei)的(de)時候可以使(shi)(shi)用的(de)函數。

以上圖為例,這個硬件代(dai)理包含了(le)一個void類(lei)型(xing)的變量hardware,用(yong)(yong)(yong)來描述設備(bei)的屬性,這里為了(le)方便表達(da),使用(yong)(yong)(yong)了(le)void類(lei)型(xing),實際應(ying)用(yong)(yong)(yong)的時候(hou),會使用(yong)(yong)(yong)相應(ying)的類(lei)型(xing),包括基本類(lei)型(xing)和組合類(lei)型(xing)(結構體(ti)、聯合體(ti)),但是多(duo)數(shu)情況下硬件代(dai)理使用(yong)(yong)(yong)結構體(ti)會比(bi)較(jiao)多(duo)一點。這些數(shu)據(ju)屬性也可以叫(jiao)做“類(lei)屬性”。

除了(le)數據屬性(xing),硬件(jian)代理里面還定義了(le)如下函數:

init()   ——多(duo)用于(yu)對硬件設備的初始化(hua)操作

open() ——用于對設備的打開操(cao)作

close() ——用(yong)于關(guan)閉設備(bei)

read() ——用(yong)于從設(she)備中讀取數據

write() ——用于往設備寫(xie)數據

 

這里定義的(de)(de)函數(shu)僅(jin)僅(jin)是為了方便理(li)解,實際(ji)應用(yong)的(de)(de)時候,根據不同(tong)的(de)(de)硬件所支(zhi)持的(de)(de)不同(tong)操作,定義不同(tong)的(de)(de)函數(shu),這些函數(shu)也可(ke)以(yi)叫做(zuo)“類方法”。

在C語言中,類的(de)定(ding)義與使(shi)用(yong)需要(yao)一定(ding)的(de)構造技巧,類的(de)聲明使(shi)用(yong).h頭文(wen)件(jian)封裝,類方法(fa)的(de)定(ding)義使(shi)用(yong).c源文(wen)件(jian)進(jin)行封裝。

上圖所(suo)表示的HWProxy代理就可以用如下兩個文(wen)件來描述:

HWProxy.h文(wen)件(jian):

/****************************************************

 *  HWProxy.h                                         

 *  Created on: 03-五(wu)月-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-五月(yue)-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;

}

 

 

這(zhe)是一個簡單的(de)硬件代理的(de)框架(jia),這(zhe)里要(yao)強調(diao)的(de)是所有(you)的(de)對外開放(fang)的(de)聲明,指示類的(de)東西全(quan)都要(yao)放(fang)在(zai).h文件中,而(er)所有(you)定(ding)義類的(de)東西,比(bi)如靜態(tai)變量、函(han)數(shu)定(ding)義等,全(quan)都要(yao)放(fang)在(zai).c文件中。私有(you)的(de)數(shu)據或者方法要(yao)用static做限定(ding),并(bing)且不要(yao)放(fang)在(zai).h文件里。

5. 效果

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

可(ke)以(yi)實(shi)現(xian)(xian)不改變用戶代(dai)(dai)碼,只(zhi)修改硬件(jian)代(dai)(dai)理(li)的(de)(de)細節,就(jiu)可(ke)以(yi)從(cong)根本上改變具(ju)(ju)體(ti)硬件(jian),提供(gong)(gong)了非常好(hao)的(de)(de)靈(ling)活性。因為(wei)硬件(jian)的(de)(de)操(cao)作(zuo)細節都被封裝到了硬件(jian)代(dai)(dai)理(li)的(de)(de)具(ju)(ju)體(ti)方法里,用戶代(dai)(dai)碼只(zhi)需要直接(jie)調用硬件(jian)代(dai)(dai)理(li)提供(gong)(gong)的(de)(de)函數接(jie)口,就(jiu)可(ke)以(yi)實(shi)現(xian)(xian)對設備的(de)(de)操(cao)作(zuo)。

上一篇:Linux信號基礎

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

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

回到頂部