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

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

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

RTT設(shè)備驅(qū)動(dòng)框架分析-串口調(diào)用流程

冬至子 ? 來源:chejia12 ? 作者:chejia12 ? 2023-10-26 17:07 ? 次閱讀

應(yīng)用層函數(shù)調(diào)用流程分析以-串口為例

1.rt_device_find調(diào)用流程

RTT內(nèi)部有一個(gè)全局變量數(shù)組rt_object_container數(shù)組的數(shù)量就是 rt_object_info_type 內(nèi)核對(duì)象的種類,其中包含一個(gè)RT_USING_DEVICE (設(shè)備的數(shù)據(jù)類型),數(shù)組內(nèi)部的每一個(gè)變量包含一個(gè)鏈表,鏈表內(nèi)部就構(gòu)造了一個(gè)設(shè)備鏈表,rt_device_find函數(shù)就是在這個(gè)數(shù)組內(nèi)部根據(jù)類型找到鏈表,然后在鏈表內(nèi)部根據(jù)設(shè)備名字找到rt_device_t設(shè)備

1.jpg

RTT內(nèi)核對(duì)象存儲(chǔ)結(jié)構(gòu),
struct rt_object_information
{
enum rt_object_class_type type; / < object class type 比如線程類型,外部設(shè)備類型,信號(hào)量類型 /
rt_list_t object_list; /
< object list每個(gè)類型的設(shè)備形成為一個(gè)鏈表 */
rt_size_t object_size; /
*< object size 每個(gè)類型的鏈表item數(shù)量 */
};

2.設(shè)備打開rt_device_open

rt_device_open 首先是調(diào)用init函數(shù),然后調(diào)用open函數(shù)
init 內(nèi)部再次調(diào)用串口的configure函數(shù)
open內(nèi)部根據(jù)flag的類型,分別申請(qǐng)發(fā)送接收緩存rt_malloc,配置發(fā)送接收硬件serial->ops->control,如果配置的dma,則使用serial->ops->control配置打開dma。

1.jpg

3.rt_device_set_rx_indicate 和rt_device_set_tx_complete函數(shù)調(diào)用流程
這里的2個(gè)函數(shù)都是直接設(shè)置rt_device的rx_indicate 和 tx_indicate

1.jpg

4.rt_device_write 調(diào)用流程分析

rt_device_write 內(nèi)部調(diào)用device->write 函數(shù)也就是 rt_serial_write,內(nèi)部根據(jù)配置串口的發(fā)送方式發(fā)送數(shù)據(jù),是阻塞是dma還是中斷,阻塞和dma都是將數(shù)據(jù)放在緩沖區(qū)內(nèi)部,緩沖區(qū)在中斷和dma部還有臨界區(qū)的保護(hù)

1.jpg

5.rt_device_read 調(diào)用流程分析

rt_device_read內(nèi)部調(diào)用device->read 函數(shù)也就是 rt_serial_read,內(nèi)部根據(jù)配置串口的接收方式接收數(shù)據(jù),是阻塞接收是dma還是中斷接收,阻塞和dma都是將數(shù)據(jù)放在緩沖區(qū)內(nèi)部,緩沖區(qū)在中斷和dma部還有臨界區(qū)的保護(hù)

1.jpg

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

    關(guān)注

    8

    文章

    1170

    瀏覽量

    53330
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    555

    瀏覽量

    100223
  • 緩存器
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    11635
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    13824
  • RTThread
    +關(guān)注

    關(guān)注

    7

    文章

    132

    瀏覽量

    40746
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    串口驅(qū)動(dòng)配置流程及電路圖設(shè)計(jì)

    串口驅(qū)動(dòng)跟其他外設(shè)的驅(qū)動(dòng)配置流程差不多,大概分為如下幾步: (1)查看電路圖,配置相應(yīng)的gpio功能引腳 (2)配置串口控制器的相應(yīng)寄存
    的頭像 發(fā)表于 10-07 17:33 ?5751次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>驅(qū)動(dòng)</b>配置<b class='flag-5'>流程</b>及電路圖設(shè)計(jì)

    OpenHarmony HDF 驅(qū)動(dòng)框架介紹和驅(qū)動(dòng)加載過程分析

    ,OpenHarmony 系統(tǒng) HDF 驅(qū)動(dòng)框架支持多種驅(qū)動(dòng)加載方式:支持驅(qū)動(dòng)動(dòng)態(tài)加載和靜態(tài)加載,解除驅(qū)動(dòng)代碼和
    發(fā)表于 08-31 15:51

    字符設(shè)備驅(qū)動(dòng) —— 字符設(shè)備驅(qū)動(dòng)框架

    1、概述:linux中一切皆文件,設(shè)備也如此,并且以操作文件即文件IO的方式訪問設(shè)備。  應(yīng)用程序只能通過庫(kù)函數(shù)中的系統(tǒng)調(diào)用來操作硬件,對(duì)于每個(gè)系統(tǒng)調(diào)用,
    發(fā)表于 10-19 17:08

    分析rt-thread的I2C設(shè)備驅(qū)動(dòng)框架

    簡(jiǎn)要上一篇分析RTT的PIN驅(qū)動(dòng),得到了很多網(wǎng)友的認(rèn)可,很開心。很多人跟我反映寫一些u***,wlan等框架,這個(gè)一步一步來,從淺到深。這一篇文章我們來
    發(fā)表于 01-12 06:23

    RT-Thread串口的硬件工作模式有哪幾種呢?怎樣去使用

    使用說明串口流程分析分為兩部分,一部分是串口驅(qū)動(dòng),另一部分是串口
    發(fā)表于 03-11 15:03

    解讀rtt的c的面向?qū)ο蟮膶?duì)象創(chuàng)建及其啟動(dòng)初始化流程

    rtt設(shè)備框架對(duì)接層。此層是拿rtt創(chuàng)建好的類來創(chuàng)建子類設(shè)備對(duì)象或者自己派生出新類創(chuàng)建子類設(shè)備
    發(fā)表于 07-05 11:01

    將硬件I2C嫁接到RTT原生的模擬I2C驅(qū)動(dòng)框架步驟分享

    1、將硬件I2C巧妙地將嫁接到RTT原生的模擬I2C驅(qū)動(dòng)框架剛開始接觸RTTI2C驅(qū)動(dòng)框架,說實(shí)在的,感覺有點(diǎn)道理。
    發(fā)表于 07-07 16:29

    詳解IO設(shè)備管理之父類調(diào)用子類方法的過程

    驅(qū)動(dòng)層都實(shí)現(xiàn)了注冊(cè)給父類的方法。這些方法是IO設(shè)備模型框架的血肉!2.2.1 先看對(duì)象創(chuàng)建流程調(diào)用設(shè)備
    發(fā)表于 10-09 15:18

    幫助你看懂并理解rtt官方的IO設(shè)備模型框架

    ——finsh線程分析——可以參考理解子類方法是如何被父類調(diào)用的。tips:(1)給BSP新增設(shè)備驅(qū)動(dòng)對(duì)接到rtt
    發(fā)表于 10-09 15:30

    為什么rtt的音頻框架recorder的相關(guān)源碼需要對(duì)pipe設(shè)備操作加中斷保護(hù)呢?

    請(qǐng)教一個(gè)rtt audio驅(qū)動(dòng)框架的問題:1)對(duì)于recorder,為什么rtt的源碼對(duì)pipe的操作全都增加了rt_hw_interrupt_disable
    發(fā)表于 03-14 10:30

    rt-thread SDIO驅(qū)動(dòng)框架分析(SD卡flash驅(qū)動(dòng)\SD Nand flash驅(qū)動(dòng)

    文章目錄rt-thread SDIO驅(qū)動(dòng)框架分析之SD卡驅(qū)動(dòng)1. 前言2. SDIO通用驅(qū)動(dòng)框架
    發(fā)表于 04-04 16:26

    RT-Thread (2) RTT SPI設(shè)備驅(qū)動(dòng)流程 || LWIP + ENC28J60

    系列文章目錄RT-Thread (1) 添加外部?jī)?nèi)存到內(nèi)存管理RT-Thread (2) RTT SPI設(shè)備驅(qū)動(dòng)流程 || LWIP + ENC28J60目錄0 概述0.0 參考資料0
    發(fā)表于 11-19 14:21 ?15次下載
    RT-Thread (2) <b class='flag-5'>RTT</b> SPI<b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>流程</b> || LWIP + ENC28J60

    《rt-thread驅(qū)動(dòng)框架分析》-i2c驅(qū)動(dòng)

    上一篇分析RTT的PIN驅(qū)動(dòng),得到了很多網(wǎng)友的認(rèn)可,很開心。很多人跟我反映寫一些usb,wlan等框架,這個(gè)一步一步來,從淺到深。
    發(fā)表于 01-26 17:03 ?0次下載
    《rt-thread<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>框架</b><b class='flag-5'>分析</b>》-i2c<b class='flag-5'>驅(qū)動(dòng)</b>

    基于IAR搭建RA MCU串口RTT Viewer打印(上)

    基于IAR搭建RA MCU串口RTT Viewer打印
    的頭像 發(fā)表于 08-14 09:49 ?600次閱讀
    基于IAR搭建RA MCU<b class='flag-5'>串口</b>與<b class='flag-5'>RTT</b> Viewer打?。ㄉ希? />    </a>
</div>                            <div   id=

    基于IAR搭建RA MCU串口RTT Viewer打印(下)

    基于IAR搭建RA MCU串口RTT Viewer打印
    的頭像 發(fā)表于 08-14 09:50 ?618次閱讀
    基于IAR搭建RA MCU<b class='flag-5'>串口</b>與<b class='flag-5'>RTT</b> Viewer打?。ㄏ拢? />    </a>
</div>                </div>            </div><!-- .main-wrap -->
        </article>

        <aside class=
    • 文章
    • 資料
    • 帖子

    推薦專欄

    更多