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

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

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

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

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

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

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

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

1.jpg

RTT內(nèi)核對象存儲結(jié)構(gòu),
struct rt_object_information
{
enum rt_object_class_type type; / < object class type 比如線程類型,外部設(shè)備類型,信號量類型 /
rt_list_t object_list; /
< object list每個類型的設(shè)備形成為一個鏈表 */
rt_size_t object_size; /
*< object size 每個類型的鏈表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的類型,分別申請發(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個函數(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ū)的保護

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ū)的保護

1.jpg

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

    關(guān)注

    8

    文章

    1158

    瀏覽量

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

    關(guān)注

    3

    文章

    552

    瀏覽量

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

    關(guān)注

    0

    文章

    63

    瀏覽量

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

    關(guān)注

    0

    文章

    64

    瀏覽量

    13798
  • RTThread
    +關(guān)注

    關(guān)注

    7

    文章

    132

    瀏覽量

    40684
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

    解讀rtt的c的面向?qū)ο蟮膶ο髣?chuàng)建及其啟動初始化流程

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

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

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

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

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

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

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

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

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

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

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

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

    系列文章目錄RT-Thread (1) 添加外部內(nèi)存到內(nèi)存管理RT-Thread (2) RTT SPI設(shè)備驅(qū)動流程 || 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ū)動</b><b class='flag-5'>流程</b> || LWIP + ENC28J60

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

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

    基于IAR搭建RA MCU串口RTT Viewer打?。ㄉ希?/a>

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

    基于IAR搭建RA MCU串口RTT Viewer打?。ㄏ拢?/a>

    基于IAR搭建RA MCU串口RTT Viewer打印
    的頭像 發(fā)表于 08-14 09:50 ?499次閱讀
    基于IAR搭建RA MCU<b class='flag-5'>串口</b>與<b class='flag-5'>RTT</b> Viewer打印(下)