應用層函數調用流程分析以-串口為例
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
發布評論請先 登錄
相關推薦
評論