国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > C語(yǔ)言設(shè)計(jì)模式——硬件代理

C語(yǔ)言設(shè)計(jì)模式——硬件代理 時(shí)間:2018-09-28      來(lái)源:未知

1. 抽象

硬件代理模式使用結(jié)構(gòu)體封裝硬件設(shè)備,硬件有可能是內(nèi)存、傳感器設(shè)備、IO設(shè)備等,但無(wú)論什么樣的設(shè)備,硬件代理的作用就是隱藏硬件的操作細(xì)節(jié),向客戶(hù)應(yīng)用程序提供初始化、配置、讀寫(xiě)數(shù)據(jù)、打開(kāi)與關(guān)閉等操作的編程接口。

2. 解決的問(wèn)題

如果每個(gè)用戶(hù)程序都直接在程序中訪問(wèn)操作底層硬件,當(dāng)更換了相同功能的不同硬件設(shè)備時(shí),有可能硬件接口并不一致,而且對(duì)硬件的操作與控制方式也并不一樣,這種情況下,就要修改每一個(gè)用戶(hù)程序,導(dǎo)致程序不容易維護(hù)。

通過(guò)提供位于實(shí)際硬件與用戶(hù)程序之間的代理,就可以極大程度避免因?yàn)楦鼡Q硬件而影響程序的設(shè)計(jì),有效減少對(duì)程序的修改。

為了方便維護(hù),客戶(hù)程序可以不用關(guān)心設(shè)備的具體通信細(xì)節(jié),這些細(xì)節(jié)都要在硬件代理的內(nèi)部私有方法中實(shí)現(xiàn)。

3. 模式結(jié)構(gòu)

硬件代理模式的基本組成結(jié)構(gòu)圖表示如下:

圖 硬件代理模式

 

4. 協(xié)作角色

4.1. 硬件設(shè)備

硬件設(shè)備描述了實(shí)際的硬件,所以不會(huì)為這個(gè)元素編寫(xiě)C語(yǔ)言代碼,放在圖里只是為了方便理解。

硬件設(shè)備和代理之間的關(guān)系就是通過(guò)通信端口、內(nèi)存地址映射或者中斷等方式互相關(guān)聯(lián)起來(lái)。

4.2. 硬件代理

這個(gè)是設(shè)計(jì)模式中主要的部分,也是一個(gè)主要的類(lèi)。

其中包含了描述設(shè)備所使用的數(shù)據(jù),以及操作設(shè)備的時(shí)候可以使用的函數(shù)。

以上圖為例,這個(gè)硬件代理包含了一個(gè)void類(lèi)型的變量hardware,用來(lái)描述設(shè)備的屬性,這里為了方便表達(dá),使用了void類(lèi)型,實(shí)際應(yīng)用的時(shí)候,會(huì)使用相應(yīng)的類(lèi)型,包括基本類(lèi)型和組合類(lèi)型(結(jié)構(gòu)體、聯(lián)合體),但是多數(shù)情況下硬件代理使用結(jié)構(gòu)體會(huì)比較多一點(diǎn)。這些數(shù)據(jù)屬性也可以叫做“類(lèi)屬性”。

除了數(shù)據(jù)屬性,硬件代理里面還定義了如下函數(shù):

init()   ——多用于對(duì)硬件設(shè)備的初始化操作

open() ——用于對(duì)設(shè)備的打開(kāi)操作

close() ——用于關(guān)閉設(shè)備

read() ——用于從設(shè)備中讀取數(shù)據(jù)

write() ——用于往設(shè)備寫(xiě)數(shù)據(jù)

 

這里定義的函數(shù)僅僅是為了方便理解,實(shí)際應(yīng)用的時(shí)候,根據(jù)不同的硬件所支持的不同操作,定義不同的函數(shù),這些函數(shù)也可以叫做“類(lèi)方法”。

在C語(yǔ)言中,類(lèi)的定義與使用需要一定的構(gòu)造技巧,類(lèi)的聲明使用.h頭文件封裝,類(lèi)方法的定義使用.c源文件進(jìn)行封裝。

上圖所表示的HWProxy代理就可以用如下兩個(gè)文件來(lái)描述:

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;

}

 

 

這是一個(gè)簡(jiǎn)單的硬件代理的框架,這里要強(qiáng)調(diào)的是所有的對(duì)外開(kāi)放的聲明,指示類(lèi)的東西全都要放在.h文件中,而所有定義類(lèi)的東西,比如靜態(tài)變量、函數(shù)定義等,全都要放在.c文件中。私有的數(shù)據(jù)或者方法要用static做限定,并且不要放在.h文件里。

5. 效果

硬件代理模式非常簡(jiǎn)單,具有封裝硬件接口,以及屏蔽硬件編碼細(xì)節(jié)的優(yōu)點(diǎn)。

可以實(shí)現(xiàn)不改變用戶(hù)代碼,只修改硬件代理的細(xì)節(jié),就可以從根本上改變具體硬件,提供了非常好的靈活性。因?yàn)橛布牟僮骷?xì)節(jié)都被封裝到了硬件代理的具體方法里,用戶(hù)代碼只需要直接調(diào)用硬件代理提供的函數(shù)接口,就可以實(shí)現(xiàn)對(duì)設(shè)備的操作。

上一篇:Linux信號(hào)基礎(chǔ)

下一篇:用QT實(shí)現(xiàn)整體換膚

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部