色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號

回到頂部

主站蜘蛛池模板: 亚洲乱码无码永久不卡在线 | 少妇富婆高级按摩出水高潮 | 正在播放国产真实哭都没用 | 欧美一区内射最近更新 | 精人妻无码一区二区三区 | 深夜在线观看视频 | 高清国语自产拍免费视频 | 亚洲一区二区三区桃乃木香奈 | 欧美亚洲色帝国 | 亚洲精品久日韩 | 欧美人与禽猛交狂配 | 丁香五月激情综合亚洲 | 成人国内精品视频在线观看 | 日本添下边视频全过程 | 热热色影音先锋 | 亚洲区色情区激情区小说色情书 | 无码AV岛国片在线观看免 | 亚洲天堂男人的天堂 | 狠狠躁夜夜躁人人躁婷婷 | 无码精品不卡一区二区三区 | 国产嫩草在线 | 精品无码久久久久久久久水蜜桃 | 免费做爰猛烈吃奶摸视频在线观看 | 亚洲AV永久无码国产精品久久 | 成在人线AV无码免观看 | 蜜臀av 国内精品久久久 | 一级黄a视频 | 午夜男女无遮掩免费视频 | 丰满熟女高潮毛茸茸欧洲视频 | 日韩av无码一区二区三区不卡毛片 | 国产精品成人AV片免费看 | yyyy11111少妇影院 | 久久99国产精品久久99小说 | 激烈的性高湖波多野结衣 | 国产古装全黄A级视频 | 小次郎av收藏家 | 国产亚洲综合av | 亚洲乱码中文字幕小综合 | 大屁股人妻女教师撅着屁股 | 亚洲AV永久无码嘿嘿嘿嘿 | 色噜噜狠狠一区二区三区果冻 |