應用層函數(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è)備
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。
3.rt_device_set_rx_indicate 和rt_device_set_tx_complete函數(shù)調(diào)用流程
這里的2個函數(shù)都是直接設(shè)置rt_device的rx_indicate 和 tx_indicate
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ū)的保護
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ū)的保護
-
接收機
+關(guān)注
關(guān)注
8文章
1184瀏覽量
53638 -
dma
+關(guān)注
關(guān)注
3文章
566瀏覽量
100966 -
緩存器
+關(guān)注
關(guān)注
0文章
63瀏覽量
11692 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
14009 -
RTThread
+關(guān)注
關(guān)注
8文章
132瀏覽量
41002
發(fā)布評論請先 登錄
相關(guān)推薦
串口驅(qū)動配置流程及電路圖設(shè)計
![<b class='flag-5'>串口</b><b class='flag-5'>驅(qū)動</b>配置<b class='flag-5'>流程</b>及電路圖設(shè)計](https://file.elecfans.com/web1/M00/C7/52/o4YBAF9rFUeALpjYAAApP3dfX6o230.png)
OpenHarmony HDF 驅(qū)動框架介紹和驅(qū)動加載過程分析
字符設(shè)備驅(qū)動 —— 字符設(shè)備驅(qū)動框架
分析rt-thread的I2C設(shè)備驅(qū)動框架
解讀rtt的c的面向?qū)ο蟮膶ο髣?chuàng)建及其啟動初始化流程
將硬件I2C嫁接到RTT原生的模擬I2C驅(qū)動框架步驟分享
詳解IO設(shè)備管理之父類調(diào)用子類方法的過程
幫助你看懂并理解rtt官方的IO設(shè)備模型框架圖
為什么rtt的音頻框架recorder的相關(guān)源碼需要對pipe設(shè)備操作加中斷保護呢?
rt-thread SDIO驅(qū)動框架分析(SD卡flash驅(qū)動\SD Nand flash驅(qū)動)
RT-Thread (2) RTT SPI設(shè)備驅(qū)動流程 || LWIP + ENC28J60
![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](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
《rt-thread驅(qū)動框架分析》-i2c驅(qū)動
![《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>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論