0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread的I/O設(shè)備模型與分類

冬至子 ? 來源:Lu_盼盼 ? 作者:Lu_盼盼 ? 2023-10-11 17:12 ? 次閱讀

RT- Thread 的I/O設(shè)備模型(簡稱“設(shè)備模型”)是建立在內(nèi)核對象模型基礎(chǔ)之上的,設(shè)備被認(rèn)為是一類對象,被納入對象管理的范疇。

每個設(shè)備對象都是由基對象派生而來的,每個具體設(shè)備都可以繼承其父類對象的屬性,并派出其私有屬性。

1.jpg

設(shè)備的對象struct rt_device的具體定義如下所示:

strcut rt_device{
struct rt_object parent; /內(nèi)核對象基類*/
enum rt_device_classe_type type; / 設(shè)備類型 /
rt_uint16_t flag; / 設(shè)備參數(shù) /
rt_uint16_t open_flag; / 設(shè)備打開標(biāo)志 /
rt_uint8_t ref_count; / 設(shè)備被引用的次數(shù) /
rt_uint8_t device_id; / 設(shè)備ID,范圍為0-255 /
/ 數(shù)據(jù)收發(fā)回調(diào)函數(shù) /
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; / 設(shè)備操作方法 /
/ 設(shè)備的私有數(shù)據(jù) /
void *user_data;
};
typedef struct rt_device *rt_device_t;
}

rt_device_class_type用于RT-Thread對設(shè)備進行分類,在每類設(shè)備執(zhí)行注冊后,系統(tǒng)會將它他們注冊為相應(yīng)類別的設(shè)備。rt_device_class_type類型枚舉如下。

enum rt_device_class_type
{
RT_Device_class_char = 0, /* 字符設(shè)備 /
RT_Device_class_Block, /
塊設(shè)備 /
RT_Device_class_NetIf, /
網(wǎng)絡(luò)設(shè)備 /
RT_Device_class_MTD, /
MTD設(shè)備 /
RT_Device_class_CAN, /
CAN設(shè)備 /
RT_Device_class_RTC, /
RTC設(shè)備 /
RT_Device_class_Sound, /
聲音設(shè)備 /
RT_Device_class_Graphic, /
圖形設(shè)備 /
RT_Device_class_I2CBUS, /
I2C設(shè)備 /
RT_Device_class_USBDevice, /
USB從設(shè)備 /
RT_Device_class_USBHost, /
USB主設(shè)備 /
RT_Device_class_SPIBUS, /
SPI總線設(shè)備 /
RT_Device_class_SPIDevice, /
SPI設(shè)備 /
RT_Device_class_SDIO, /
SDIO總線設(shè)備 /
RT_Device_class_PM, /
低功耗設(shè)備 /
RT_Device_class_Pipe, /
管道設(shè)備 /
RT_Device_class_Portal, /
雙向管理設(shè)備 /
RT_Device_class_Timer, /
定時器設(shè)備 /
RT_Device_class_Miscellaneous, /
雜項設(shè)備 /
RT_Device_class_Sensor, /
傳感器設(shè)備 /
RT_Device_class_Touch, /
觸摸設(shè)備 /
RT_Device_class_Unknown /
未知設(shè)備 */
};

其中,字符設(shè)備、塊設(shè)備是常用的設(shè)備類型,它們的分類依據(jù)是設(shè)備與系統(tǒng)之間的數(shù)據(jù)傳輸處理方式。字符設(shè)備允許非結(jié)構(gòu)化的數(shù)據(jù)傳輸,通常數(shù)據(jù)傳輸采用串行的形式,每次一字節(jié)。字符設(shè)備通常是一些簡單設(shè)備,如串口、按鍵。

塊設(shè)備每次傳輸一個數(shù)據(jù)塊,例如每次傳輸512字節(jié)數(shù)據(jù)。這個數(shù)據(jù)塊大小是硬件強制性要求的,數(shù)據(jù)塊可能使用某類數(shù)據(jù)接口或某些強制性的傳輸協(xié)議,否則就可能發(fā)生錯誤。因此,有時塊設(shè)備驅(qū)動程序進行讀/寫操作時必須執(zhí)行附加的工作。

當(dāng)系統(tǒng)服務(wù)需要進行大理數(shù)據(jù)的寫操作時,設(shè)備驅(qū)動程序必須將數(shù)據(jù)劃分為多個包,每個包采用設(shè)備指定的數(shù)據(jù)尺寸。而在實際操作中,最后一部分?jǐn)?shù)據(jù)尺寸有可能小于正的設(shè)備塊盡尺寸。最后需要處理“小塊”的操作。

今天主要學(xué)習(xí)了設(shè)備對象結(jié)構(gòu)體rt_device,里面包含的對象結(jié)構(gòu),還有學(xué)習(xí)了rt_device的分類枚舉rt_device_class_type。里面定義了0-21的對象。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動器
    +關(guān)注

    關(guān)注

    52

    文章

    8099

    瀏覽量

    145813
  • 串口設(shè)備
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    8567
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39837
收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread記錄(十、全面認(rèn)識 I/O 設(shè)備模型

    學(xué)完 RT-Thread 內(nèi)核,從本文開始熟悉了解 RT-Thread I/O 設(shè)備管理相關(guān)知識。
    的頭像 發(fā)表于 06-30 10:38 ?4045次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十、全面認(rèn)識 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>)

    RT-Thread記錄(十一、UART設(shè)備—源碼解析)

    一文帶你深入理解 RT-Thread I/O 設(shè)備模型 — UART 設(shè)備源碼分析。
    的頭像 發(fā)表于 07-01 11:24 ?5351次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十一、UART<b class='flag-5'>設(shè)備</b>—源碼解析)

    RT-Thread記錄(十四、I/O 設(shè)備模型之ADC設(shè)備

    我曾經(jīng)考慮過把 RT-Thread 常用的設(shè)備都寫完,其實通過前面的《全面認(rèn)識 RT-Thread I/O
    的頭像 發(fā)表于 07-04 12:28 ?4298次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十四、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>之ADC<b class='flag-5'>設(shè)備</b>)

    RT-Thread記錄(十二、UART設(shè)備—使用測試)

    從 UART 設(shè)備開始學(xué)會使用 RT-Thread I/O 設(shè)備模型
    的頭像 發(fā)表于 07-02 12:42 ?4880次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十二、UART<b class='flag-5'>設(shè)備</b>—使用測試)

    RT-Thread記錄(十三、I/O 設(shè)備模型之PIN設(shè)備

    講完UART設(shè)備之后,我們已經(jīng)熟悉RT-Thread I/O 設(shè)備模型了,回頭看看基本的 PIN
    的頭像 發(fā)表于 07-03 11:28 ?4551次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十三、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>之PIN<b class='flag-5'>設(shè)備</b>)

    基于RT-Thread的SPI通訊

    驅(qū)動層的驅(qū)動。(rt-thread設(shè)備 I/O 模型設(shè)備管理層、
    的頭像 發(fā)表于 08-22 09:28 ?1632次閱讀

    RT-Thread內(nèi)核簡介

    RT-Thread 內(nèi)核簡介前言1、RT-Thread 的架構(gòu)2、RT-Thread 的內(nèi)核3、RT-Thread 內(nèi)核功能部分線程調(diào)度時鐘管理線程間同步線程間通信內(nèi)存管理
    發(fā)表于 08-06 07:44

    RT-Thread 的 IO 設(shè)備模型框架是由哪些部分組成的呢

    RT-ThreadI/O 設(shè)備模型框架是由哪些部分組成的呢?接下來由小編給大家詳細(xì)介紹一下。1、R
    發(fā)表于 03-11 18:17

    RT-Thread AI kit開源:輕松實現(xiàn)一鍵部署AI模型RT-Thread

    RT-AK 是 RT-Thread 團隊為 RT-Thread 實時操作系統(tǒng)所開發(fā)的 AI 套件,能夠一鍵將 AI 模型部署到 RT-Thread
    發(fā)表于 01-25 18:18 ?3次下載
    <b class='flag-5'>RT-Thread</b> AI kit開源:輕松實現(xiàn)一鍵部署AI<b class='flag-5'>模型</b>至 <b class='flag-5'>RT-Thread</b>

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備的實現(xiàn)

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備的實現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?2132次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>框架及創(chuàng)建注冊<b class='flag-5'>設(shè)備</b>的實現(xiàn)

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_I/O 設(shè)備模型

    RT-Thread文檔_I/O 設(shè)備模型
    發(fā)表于 02-22 18:31 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>

    RT-Thread文檔_I2C 總線設(shè)備

    RT-Thread文檔_I2C 總線設(shè)備
    發(fā)表于 02-22 18:35 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>2C 總線<b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_SPI 設(shè)備

    RT-Thread文檔_SPI 設(shè)備
    發(fā)表于 02-22 18:36 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_SPI <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_Pulse Encoder 設(shè)備

    RT-Thread文檔_Pulse Encoder 設(shè)備
    發(fā)表于 02-22 18:39 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_Pulse Encoder <b class='flag-5'>設(shè)備</b>