电子说
应用层函数调用流程分析以-串口为例
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部还有临界区的保护
全部0条评论
快来发表一下你的评论吧 !