應(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è)備
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文章
1158瀏覽量
53175 -
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
發(fā)布評論請先 登錄
相關(guān)推薦
評論