應用層函數調用流程分析以-串口為例
1.rt_device_find調用流程
RTT內部有一個全局變量數組rt_object_container數組的數量就是 rt_object_info_type 內核對象的種類,其中包含一個RT_USING_DEVICE (設備的數據類型),數組內部的每一個變量包含一個鏈表,鏈表內部就構造了一個設備鏈表,rt_device_find函數就是在這個數組內部根據類型找到鏈表,然后在鏈表內部根據設備名字找到rt_device_t設備
RTT內核對象存儲結構,
struct rt_object_information
{
enum rt_object_class_type type; / < object class type 比如線程類型,外部設備類型,信號量類型 /
rt_list_t object_list; / < object list每個類型的設備形成為一個鏈表 */
rt_size_t object_size; /*< object size 每個類型的鏈表item數量 */
};
2.設備打開rt_device_open
rt_device_open 首先是調用init函數,然后調用open函數
init 內部再次調用串口的configure函數
open內部根據flag的類型,分別申請發送接收緩存rt_malloc,配置發送接收硬件serial->ops->control,如果配置的dma,則使用serial->ops->control配置打開dma。
3.rt_device_set_rx_indicate 和rt_device_set_tx_complete函數調用流程
這里的2個函數都是直接設置rt_device的rx_indicate 和 tx_indicate
4.rt_device_write 調用流程分析
rt_device_write 內部調用device->write 函數也就是 rt_serial_write,內部根據配置串口的發送方式發送數據,是阻塞是dma還是中斷,阻塞和dma都是將數據放在緩沖區內部,緩沖區在中斷和dma部還有臨界區的保護
5.rt_device_read 調用流程分析
rt_device_read內部調用device->read 函數也就是 rt_serial_read,內部根據配置串口的接收方式接收數據,是阻塞接收是dma還是中斷接收,阻塞和dma都是將數據放在緩沖區內部,緩沖區在中斷和dma部還有臨界區的保護
-
接收機
+關注
關注
8文章
1184瀏覽量
53631 -
dma
+關注
關注
3文章
566瀏覽量
100949 -
緩存器
+關注
關注
0文章
63瀏覽量
11692 -
串口中斷
+關注
關注
0文章
67瀏覽量
14002 -
RTThread
+關注
關注
8文章
132瀏覽量
40999
發布評論請先 登錄
相關推薦
OpenHarmony HDF 驅動框架介紹和驅動加載過程分析
字符設備驅動 —— 字符設備驅動框架
分析rt-thread的I2C設備驅動框架
將硬件I2C嫁接到RTT原生的模擬I2C驅動框架步驟分享
為什么rtt的音頻框架recorder的相關源碼需要對pipe設備操作加中斷保護呢?
rt-thread SDIO驅動框架分析(SD卡flash驅動\SD Nand flash驅動)
RT-Thread (2) RTT SPI設備驅動流程 || LWIP + ENC28J60
![RT-Thread (2) <b class='flag-5'>RTT</b> SPI<b class='flag-5'>設備</b><b class='flag-5'>驅動</b><b class='flag-5'>流程</b> || LWIP + ENC28J60](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
《rt-thread驅動框架分析》-i2c驅動
![《rt-thread<b class='flag-5'>驅動</b><b class='flag-5'>框架</b><b class='flag-5'>分析</b>》-i2c<b class='flag-5'>驅動</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論