RTT设备驱动框架分析-串口调用流程

电子说

1.3w人已加入

描述

应用层函数调用流程分析以-串口为例

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部还有临界区的保护

接收机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分