RT- Thread 的I/O設備模型(簡稱“設備模型”)是建立在內核對象模型基礎之上的,設備被認為是一類對象,被納入對象管理的范疇。
每個設備對象都是由基對象派生而來的,每個具體設備都可以繼承其父類對象的屬性,并派出其私有屬性。
設備的對象struct rt_device的具體定義如下所示:
strcut rt_device{
struct rt_object parent; /內核對象基類*/
enum rt_device_classe_type type; / 設備類型 /
rt_uint16_t flag; / 設備參數 /
rt_uint16_t open_flag; / 設備打開標志 /
rt_uint8_t ref_count; / 設備被引用的次數 /
rt_uint8_t device_id; / 設備ID,范圍為0-255 /
/ 數據收發回調函數 /
rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);
const struct rt_device_ops *ops; / 設備操作方法 /
/ 設備的私有數據 /
void *user_data;
};
typedef struct rt_device *rt_device_t;
}
rt_device_class_type用于RT-Thread對設備進行分類,在每類設備執行注冊后,系統會將它他們注冊為相應類別的設備。rt_device_class_type類型枚舉如下。
enum rt_device_class_type
{
RT_Device_class_char = 0, /* 字符設備 /
RT_Device_class_Block, / 塊設備 /
RT_Device_class_NetIf, / 網絡設備 /
RT_Device_class_MTD, / MTD設備 /
RT_Device_class_CAN, / CAN設備 /
RT_Device_class_RTC, / RTC設備 /
RT_Device_class_Sound, / 聲音設備 /
RT_Device_class_Graphic, / 圖形設備 /
RT_Device_class_I2CBUS, / I2C設備 /
RT_Device_class_USBDevice, / USB從設備 /
RT_Device_class_USBHost, / USB主設備 /
RT_Device_class_SPIBUS, / SPI總線設備 /
RT_Device_class_SPIDevice, / SPI設備 /
RT_Device_class_SDIO, / SDIO總線設備 /
RT_Device_class_PM, / 低功耗設備 /
RT_Device_class_Pipe, / 管道設備 /
RT_Device_class_Portal, / 雙向管理設備 /
RT_Device_class_Timer, / 定時器設備 /
RT_Device_class_Miscellaneous, / 雜項設備 /
RT_Device_class_Sensor, / 傳感器設備 /
RT_Device_class_Touch, / 觸摸設備 /
RT_Device_class_Unknown / 未知設備 */
};
其中,字符設備、塊設備是常用的設備類型,它們的分類依據是設備與系統之間的數據傳輸處理方式。字符設備允許非結構化的數據傳輸,通常數據傳輸采用串行的形式,每次一字節。字符設備通常是一些簡單設備,如串口、按鍵。
塊設備每次傳輸一個數據塊,例如每次傳輸512字節數據。這個數據塊大小是硬件強制性要求的,數據塊可能使用某類數據接口或某些強制性的傳輸協議,否則就可能發生錯誤。因此,有時塊設備驅動程序進行讀/寫操作時必須執行附加的工作。
當系統服務需要進行大理數據的寫操作時,設備驅動程序必須將數據劃分為多個包,每個包采用設備指定的數據尺寸。而在實際操作中,最后一部分數據尺寸有可能小于正的設備塊盡尺寸。最后需要處理“小塊”的操作。
今天主要學習了設備對象結構體rt_device,里面包含的對象結構,還有學習了rt_device的分類枚舉rt_device_class_type。里面定義了0-21的對象。
-
驅動器
+關注
關注
53文章
8271瀏覽量
147068 -
串口設備
+關注
關注
0文章
16瀏覽量
8616 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40386
發布評論請先 登錄
相關推薦
評論