1、定義介面屬性:
其中屬性包括:裝置識別id(標誌)、裝置型別、裝置是否可用(所有裝置假定唯一性即所有裝置都不允許在同一時刻被多個任務使用)、下乙個裝置控制塊指標(利用該指標每建立乙個裝置的時候將建立的裝置放入裝置管理佇列中)、this指標、裝置操作控制代碼;
2、操作裝置的方法包括:
a、裝置控制塊空閒列表初始化函式:利用靜態陣列建立乙個空閒的裝置控制塊鍊錶。
b、建立裝置:過程是從空閒裝置控制塊列表中取得乙個控制塊,同時呼叫作業系統的建立互斥訊號量函式初始化device_switch;同時利用傳進來的引數dev_operations* creat_list初始化裝置操作函式列表指標。進一步初始化this指標、裝置id,並呼叫引數列表中的creat_list ->dev_init(void *parameter)函式,將傳入的引數dev_creat_parameter用於初始化裝置。最後將該控制塊鏈結到有效裝置控制塊鍊錶中。
c、裝置開啟:過程是從有效的裝置控制塊鍊錶中找到指定id的裝置控制塊,審請訊號量,如果審請通過則返回該裝置的操作控制代碼。
d、裝置關閉:過程則是
typedef struct device_control_block dev_control_block;
typedef struct device_operations_list dev_operations;
struct device_control_block;
裝置空閒列表初始化函式:
裝置建立:uint32 creatdevic(uint8 dev_id,void *dev_creat_parameter,dev_operations* creat_list);
裝置開啟:dev_operations * devopen(uint8 dev_id,void *parameter);
裝置關閉:uint32 devclose(dev_operations* dev);
裝置解除安裝:
e、裝置的操作控制代碼中函式列表包括:初始化、讀出、控制、寫入; 寫入和讀出其實質是寫和讀各個裝置的緩衝區。而控制應包括裝置引數的設定,起動和停止三部分。裝置開啟和關閉主要解決裝置的共享和分配。
struct device_operations_list
3、上層抽像介面:
為了方便應用程式的開發所以為每個裝置提供特定的抽像介面,設定上層抽像介面的原則是硬體無關性。利用這一特性將來所有的應用程式,gui,tcp/ip都可以很輕鬆的在不同的硬體體系上執行。
為了實現這一特性,該類所有介面的實現過程如下:
a、 通過裝置開啟操作得到裝置的操作控制代碼。
b、 利用該控制代碼實現介面的底層操作。
以uart和i2c為例子:
為了實現uart格式化字元輸出可利用裝置操作控制代碼所包含的字元寫入函式,實現對外輸出字元。
為了實現i2c的主模式傳送則首先利用i2c裝置控制代碼的裝置控制函式設定i2c模式、所操作i2c裝置位址、資料位址;然後利用字元寫入函式對外輸出將要傳送的資料。
基於訊息驅動的物件導向通用C S應用框架 八
不論使用二進位制訊息格式還是文字訊息格式例如xml訊息,訊息分發框架都是建立在固定的訊息頭內容的基礎之上的,因為只要解析出訊息頭就完全可以進行訊息分發了。一般來說,訊息頭至少包含以下內容 訊息型別 訊息id 訊息序列號。為了滿足將來業務功能的擴充套件需要 比如可令伺服器作為乙個訊息 中心,將某些前台...
基於訊息驅動的物件導向通用C S應用框架 九
有了訊息格式作為基礎,就可以實現半結構化訊息解析器和介面networkobserver了。通訊層和框架之間的networkobserver介面顯然是使用了observer設計模式。我們先來看它的實現類定義 class networkobserverimpl public networkobserve...
UCOSII下外部中斷的實現
exti initialize void extix init void 其中幾個關鍵的中斷函式 定義在bsp int.c void bsp intvectset cpu data int id,cpu fnct void isr 設定中斷向量及處理中斷服務函式,產生中斷時將跳至中斷服務函式的位址 ...