0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:chejia12 作者:chejia12 2023-10-26 17:07 次阅读

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

1.rt_device_find调用流程

RTT内部有一个全局变量数组rt_object_container数组的数量就是 rt_object_info_type 内核对象的种类,其中包含一个RT_USING_DEVICE (设备的数据类型),数组内部的每一个变量包含一个链表,链表内部就构造了一个设备链表,rt_device_find函数就是在这个数组内部根据类型找到链表,然后在链表内部根据设备名字找到rt_device_t设备

1.jpg

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。

1.jpg

3.rt_device_set_rx_indicate 和rt_device_set_tx_complete函数调用流程
这里的2个函数都是直接设置rt_device的rx_indicate 和 tx_indicate

1.jpg

4.rt_device_write 调用流程分析

rt_device_write 内部调用device->write 函数也就是 rt_serial_write,内部根据配置串口的发送方式发送数据,是阻塞是dma还是中断,阻塞和dma都是将数据放在缓冲区内部,缓冲区在中断和dma部还有临界区的保护

1.jpg

5.rt_device_read 调用流程分析

rt_device_read内部调用device->read 函数也就是 rt_serial_read,内部根据配置串口的接收方式接收数据,是阻塞接收是dma还是中断接收,阻塞和dma都是将数据放在缓冲区内部,缓冲区在中断和dma部还有临界区的保护

1.jpg

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

    关注

    8

    文章

    1122

    浏览量

    52654
  • dma
    dma
    +关注

    关注

    3

    文章

    536

    浏览量

    99072
  • 缓存器
    +关注

    关注

    0

    文章

    63

    浏览量

    11580
  • 串口中断
    +关注

    关注

    0

    文章

    63

    浏览量

    13615
  • RTThread
    +关注

    关注

    7

    文章

    129

    浏览量

    40523
收藏 人收藏

    评论

    相关推荐

    OpenHarmony HDF 驱动框架介绍和驱动加载过程分析

    ,OpenHarmony 系统 HDF 驱动框架支持多种驱动加载方式:支持驱动动态加载和静态加载,解除驱动代码和
    发表于 08-31 15:51

    字符设备驱动 —— 字符设备驱动框架

    1、概述:linux中一切皆文件,设备也如此,并且以操作文件即文件IO的方式访问设备。  应用程序只能通过库函数中的系统调用来操作硬件,对于每个系统调用
    发表于 10-19 17:08

    分析rt-thread的I2C设备驱动框架

    简要上一篇分析RTT的PIN驱动,得到了很多网友的认可,很开心。很多人跟我反映写一些u***,wlan等框架,这个一步一步来,从浅到深。这一篇文章我们来
    发表于 01-12 06:23

    RT-Thread串口的硬件工作模式有哪几种呢?怎样去使用

    使用说明串口流程分析分为两部分,一部分是串口驱动,另一部分是串口
    发表于 03-11 15:03

    讲解一下RT-Threa中串口设备的应用开发

    中,对于一个具体的设备,其自底向上的开发流程可总结为如下步骤打开设备驱动框架支持对接设备
    发表于 05-09 15:05

    解读rtt的c的面向对象的对象创建及其启动初始化流程

    rtt设备框架对接层。此层是拿rtt创建好的类来创建子类设备对象或者自己派生出新类创建子类设备
    发表于 07-05 11:01

    将硬件I2C嫁接到RTT原生的模拟I2C驱动框架步骤分享

    1、将硬件I2C巧妙地将嫁接到RTT原生的模拟I2C驱动框架刚开始接触RTTI2C驱动框架,说实在的,感觉有点道理。
    发表于 07-07 16:29

    详解IO设备管理之父类调用子类方法的过程

    驱动层都实现了注册给父类的方法。这些方法是IO设备模型框架的血肉!2.2.1 先看对象创建流程调用设备
    发表于 10-09 15:18

    帮助你看懂并理解rtt官方的IO设备模型框架

    ——finsh线程分析——可以参考理解子类方法是如何被父类调用的。tips:(1)给BSP新增设备驱动对接到rtt
    发表于 10-09 15:30

    如何使用RT-Thread的串口设备

    rt_hw_serial_register 决定的,该函数将串口硬件驱动和 RT-Thread 设备管理框架联系起来了。接着调用 rt_d
    发表于 10-25 11:05

    为什么rtt的音频框架recorder的相关源码需要对pipe设备操作加中断保护呢?

    请教一个rtt audio驱动框架的问题:1)对于recorder,为什么rtt的源码对pipe的操作全都增加了rt_hw_interrupt_disable
    发表于 03-14 10:30

    rt-thread SDIO驱动框架分析(SD卡flash驱动\SD Nand flash驱动

    文章目录rt-thread SDIO驱动框架分析之SD卡驱动1. 前言2. SDIO通用驱动框架
    发表于 04-04 16:26

    RT-Thread (2) RTT SPI设备驱动流程 || LWIP + ENC28J60

    系列文章目录RT-Thread (1) 添加外部内存到内存管理RT-Thread (2) RTT SPI设备驱动流程 || LWIP + ENC28J60目录0 概述0.0 参考资料0
    发表于 11-19 14:21 15次下载
    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

    RTT串口v1使用分析以及问题排查指南 (二)

    结合串口使用过程的反馈信息,本章节将结合 FinSH组件的串口相关问题 和 应用层上使用串口设备的相关问题 这两个方面进行分析。这一章节..
    发表于 01-25 17:34 0次下载
    <b class='flag-5'>RTT</b><b class='flag-5'>串口</b>v1使用<b class='flag-5'>分析</b>以及问题排查指南 (二)

    《rt-thread驱动框架分析》-i2c驱动

    上一篇分析RTT的PIN驱动,得到了很多网友的认可,很开心。很多人跟我反映写一些usb,wlan等框架,这个一步一步来,从浅到深。
    发表于 01-26 17:03 0次下载
    《rt-thread<b class='flag-5'>驱动</b><b class='flag-5'>框架</b><b class='flag-5'>分析</b>》-i2c<b class='flag-5'>驱动</b>