rt-thread UART 驱动注册IO设备管理器的调用关系

RT-Thread开发环境搭建:从零开始配置STM32高效工具链 实时操作系统(RTOS)是嵌入式开发中实现多任务调度与资源管理的核心组件,其原理在于通过内核调度算法高效管理CPU时间片与外设资源。在物联网与智能硬件领域,RTOS的技术价值在于提供稳定、可预测的实时响应能力,并简化复杂应用的开发流程。对于STM32等ARM Cortex-M系列微控制器,选择合适的开发环境与工具链是项目成功的关键应用场景。本文聚焦于RT-Thread这一国产开源RTOS,深入解析其开发环境配置,涵盖RT-Thread Studio一站式IDE与VSCode+ENV定制化方案两套主流工具链的 阅读详情
/************************ UART 驱动注册IO设备管理器的调用关系 ************************/
struct imxrt_uart{
    char *name;
    LPUART_Type *uart_base;
    IRQn_Type irqn;
    rt_uint16_t dma_flag;
    struct rt_serial_device serial;
};

struct rt_uart_ops
{
    rt_err_t (*configure)(struct rt_serial_device *serial, struct serial_configure *cfg);
    rt_err_t (*control)(struct rt_serial_device *serial, int cmd, void *arg);

    int (*putc)(struct rt_serial_device *serial, char c);
    int (*getc)(struct rt_serial_device *serial);

    rt_size_t (*dma_transmit)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction);
};

INIT_BOARD_EXPORT(rt_hw_uart_init);     drv_uart.c
    rt_hw_uart_init     static struct imxrt_uart uarts[];   drv_uart.c
        uarts[i].serial.ops    = &imxrt_uart_ops;
        uarts[i].serial.config = config;
        rt_hw_serial_register(&uarts[i].serial, uarts[i].name, ...);    serial.c
        rt_hw_serial_register(struct rt_serial_device *serial, const char *name, ...)
            device = &(serial->parent);
            device->init        = rt_serial_init;     
            device->open        = rt_serial_open;
            device->close       = rt_serial_close;
                rt_serial_close(struct rt_device *dev)
                    serial = (struct rt_serial_device *)dev;
            device->read        = rt_serial_read;
            device->write       = rt_serial_write;
            device->control     = rt_serial_control;
            rt_device_register(device, name, ...)      device.c
            rt_device_register(rt_device_t dev, const char *name, ...)
            

rt-thread IO设备管理器 调用流程, 拿UART举例
1.用户编写 drv_uart.c 在 rt_hw_uart_init 注册串口设备; 并将 rt_hw_uart_init 作为board初始化时调用 "INIT_BOARD_EXPORT"
2. 在 drv_uart.c 文件中主要做如下事情
    a.定义 serial 设备, 在 Linux2.x以上 设备与驱动分开, 这里参考的是 Linux2.x以下版本, 设备与驱动在一起
    b."serial串口设备驱动框架"是 rt-thread 将公共部分进行抽离, 抽象出来的这一层
    c.补充 "serial串口设备驱动框架", 针对具体的设备做具体实现, 而实现方式就是对 rt_serial_device.ops 成员赋值
    d.补充 "serial串口设备驱动框架", 针对初始化时具体配置, 做具体调整, 实现方式是对 rt_serial_device.config 成员赋值
    e.在 drv_uart.c 与 serial.c 中传递的是 struct rt_serial_device 结构体, 那从 serial.c 回调 drv_uart.c 中的函数, 是怎么找到 struct imxrt_uart 结构体呢?
        通过 rt_container_of 函数
3. 在 serial.c 文件中做了如下事情
    a.对抽象出来的公共成员及方法做对应的处理
    b.回调 drv_uart.c 文件中的方法, 传递 struct rt_serial_device, 该结构体定义在 serial.h 文件中. 所以在 drv_uart.c 与 serial.c 之间的传递中要传递 struct rt_serial_device
    c.在 rt_hw_serial_register 函数中就 找到 rt_device_t 成员, 并对 rt_device_t 成员进行初始化, 主要是初始化"回调函数", 在 IO设备管理器 执行过程中, 才能找 "serial串口设备驱动框架" 的处理函数. 执行到 serial.c 中的函数时, 再回调 drv_uart.c 的函数. 注册就这样从上层一层层到下层, 回调就这样从下层一层层到上层.
STM32F103移植RT-Thread 3.0.3实战:从零构建嵌入式实时系统平台 实时操作系统(RTOS)是嵌入式开发中实现多任务调度和资源管理的核心软件层,其原理在于通过任务调度器管理多个执行线程,确保关键任务能在确定时间内响应。在物联网终端、工业控制等场景中,RTOS的技术价值在于提供可靠的任务管理、同步机制和硬件抽象,从而提升开发效率和系统可靠性。RT-Thread作为一款国产开源实时操作系统,以其小而美的内核和丰富的组件生态著称,特别适合资源受限的MCU平台。本文以广泛应用的STM32F103 Cortex-M3 MCU为例,详细解析如何将RT-Thread 3.0.3版本移植到 阅读详情

相关推荐

Keil5安装激活与STM32开发环境搭建全攻略

集成开发环境(IDE)是嵌入式软件开发的核心工具,它通过集成编辑器、编译器、调试器等组件,极大提升了代码编写、构建和调试的效率。其工作原理是为特定硬件平台提供统一的软件接口和工具链,将高级语言代码转化为可执行的机器码。对于ARM Cortex-M系列微控制器开发而言,Keil MDK(Microcontroller Development Kit)因其与芯片厂商的深度整合、稳定的调试体验和完整的生态支持,成为广泛使用的标准IDE之一,尤其适用于STM32等单片机的学习、原型验证和产品开发。掌握Keil MD

weixin_33787529的博客 1586

RT-Thread学习笔记(2):serial驱动框架简要分析

rt_hw_usart_init函数干了些什么?? 之前写了一篇pin设备框架分析pin设备框架分析,简单理了一下pin设备框架实现的思想,其实今天要说的串口基本类似,今天咱们就长话短说,我介绍几个重要的部分。 首先就是标题的这个函数。包括上一节内容的**int rt_hw_pin_init(void)**函数。我们都是围绕这个进行介绍的。 int rt_hw_usart_init(void) { rt_size_t obj_num = sizeof(uart_obj) / sizeof(struc

BLBQ962464的博客 2065

2026年Keil5 MDK完整安装与STM32开发入门指南

集成开发环境是嵌入式软件开发的核心工具,它通过整合编辑器、编译器、调试器等组件,极大提升了代码编写、构建和调试的效率。Keil MDK作为ARM Cortex-M微控制器开发的事实标准,其与ARM生态的深度绑定、强大的调试仿真能力以及丰富的中间件支持,使其在工业控制、汽车电子、物联网设备等实时性要求高的场景中具有不可替代的技术价值。本文基于最新的官方资源和社区实践,详细解析Keil5 MDK的安装、配置与激活流程,并手把手指导完成第一个STM32 LED闪烁程序的编译与下载,为开发者搭建坚实的嵌入式开发环境

weixin_30326515的博客 428

RT-Thread 自动初始化机制

初始化函数主动通过这些宏接口进行申明,如INIT_BOARD_EXPORT(rt_hw_usart_init),链接器会自动收集所有被申明的初始化函数,放到RTI符号段,该符号段位于内存分布的RO段,该RTI符号段中的所有函数在系统初始化时会被自动调用。系统首先根据对象类型获取对象信息(特别是对象类型的大小信息以用于系统能够分配正确大小的内存数据块),而后从内存堆中分配对象所对应大小的内存空间,然后再对该对象进行必要的初始化,最后将其插入到它所在的对象容器链表中。

Caramel_biscuit的博客 1074

RT-Thread-学习分析(详细版)

RT-Thread简介–>>>下载 具体包括以下部分: 内核层:RT-Thread 内核,是 RT-Thread的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。 组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、 网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,

姬绪孔的博客 1万+

RT-Thread实时操作系统简介

RT-Thread实时操作系统简介

hurryddd 3万+

RT-Thread简介

RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过16个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。

Caramel_biscuit的博客 2707

深度学习笔记(3)——kernel(内核)与filter(滤波器)

本文仅仅简单介绍了kernel和filter的概念,介绍了确定filter和kernel个数的方法。

cs111211的博客 7137

[嵌入式系统-54]:RT-Thread-内核:内核基础与核心概念

本章介绍 RT-Thread内核基础与核心概念,包括:内核简介系统的启动流程及内核配置的部分内容,为后面的章节奠定基础。RT-Thread 内核的简单介绍,从软件架构入手讲解实时内核的组成与实现,这部分给初学者引入一些 RT-Thread 内核相关的概念与基础知识,让初学者对内核有初步的了解,知道内核的组成部分、系统如何启动、内存分布情况以及内核配置方法。一、RT-Thread 内核介绍内核是一个操作系统的核心,是操作系统最基础也是最重要的部分。它负责管理系统的。

文火冰糖(王文兵)的博客 5146

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 490

App渗透 - 人脸识别登录绕过

一、APP抓包和逆向破解加密算法打开APP是一个登录框抓包后发现参数被加密了使用Jadx脱源码发现,并没有加壳也没有混淆,运气很好根据经验,先搜索Encrypt、Decrypt等关键字,发现在Common.js中有一个encryptData函数定位过去,一套加解密算法都写好了放在这放到浏览器console里面调试,果然没错二、寻找注入点首先测试了一下注入明文:{"userName":"TEST'...

渗透测试研究中心 2823

[嵌入式系统-15]:RT-Thread -1- 简介与技术架构

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,libc接口,图形用户界面等。

文火冰糖(王文兵)的博客 5685

USB PD Sink HUSB238A可应用于24V电动风扇/电动工具

HUSB238A在I2C模式下,可申请PD3.1 EPR AVS功率,可申请24V电压直接给电机供电

Hynetek的博客 759

RT-Thread UART驱动

RT-Thread提供了一套统一的I/O设备模型,UART作为字符设备被纳入该框架管理。应用程序通过设备管理层提供的标准接口访问底层硬件,这使得驱动与应用解耦,提高了可移植性。关键数据结构与流程:在QEMU vexpress-a9 BSP中,UART设备通常已被模拟并集成在BSP的驱动层。我们的重点在于理解驱动如何注册以及应用如何对接。UART设备名 在board.c中连接FinSh Shell 四、 工作模式与应用层操作模式 概念 含义 谁来决定? 常见配置 硬件工作模式 驱动底层

m0_65525149的博客 443

harbor x509: certificate signed by unknown authority【20251222】

本教程通过「合并证书链(服务器端)+ 预置根 CA(客户端)」彻底解决了自签名证书的 x509 错误,同时集成了 Trivy 漏洞扫描,实现了 Harbor 从搭建到实用的全流程。证书链合并是服务器端的关键,确保客户端获取完整信任路径;客户端需同时配置「系统信任库 + Docker 信任目录」,避免 Docker 独立信任机制导致的问题;所有 IP 需保持一致(Harbor 配置、证书绑定、客户端访问),是避免错误的基础。

老韩的Linux云计算架构师进阶之路 681

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 592

RT-Thread IO设备模型

RTT提供了一套简单的I/O设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。应用程序通过I/O设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。设备注销后,将从I/O设备管理器中移除,也就不能再通过设备查找搜索到该设备。对于一些复杂设备,需要使用到对应的设备驱动层框架,进行注册,如:看门狗定时器。简单设备的注册不经过设备驱动框架层,直接将设备注册到I/O设备管理器中。驱动层负责创建设备实例,并注册到I/O设备管理器中。

Caramel_biscuit的博客 390

优秀的 Verilog/FPGA开源项目介绍(二十六)- ISP (图像信号处理)

介绍查看《ISP算法及架构分析介绍》今天项目的顺序就是先介绍几个关于ISP算法架构的项目,包括python、matlab、c等高级语言实现的ISP算法架构,最后介绍一个FPGA实现ISP的项目。openISPhttps://github.com/cruxopen/openISP项目介绍用python实现的ISP架构,该架构涉及到的知识如下:下图是最新实现的模块:主要模块如...

OpenFPGA的博客 4948

rtthread studio与正点原子apollo(15)--设备IO注册

rt-thread

hfh8130的博客 1236

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RT-Thread(一)

RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析)_RTT_矜辰所致_InfoQ写作社区Yaochenger/RT-Thread-Source-Notes: RT-Thread内核源码中文注释源码解读·RT-Thread操作系统的任务(上)_51CTO博客_rt-thread操作系统的特点【万字长文慎点】RT-Thread 内核要点,一网打尽_RT-Thread_嵌入式操作系统论坛_MCU智学网 - Powered by Discuz! RT-Thread记录(十一、I/O

m0_59749585的博客 1256

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RT-Thread大赛硬件选型指南:从STM32到ESP32的嵌入式开发板实战解析

嵌入式实时操作系统(RTOS)是物联网和智能设备开发的核心基础,它通过任务调度、内存管理和设备驱动框架,为资源受限的微控制器(MCU)提供多任务并发执行能力。其技术价值在于提升系统可靠性、降低功耗并简化复杂应用的开发流程,广泛应用于智能家居、工业控制和消费电子等领域。在RT-Thread嵌入式开发实践中,硬件选型是关键环节,需综合评估芯片性能、外设资源和开发生态。本文聚焦**RT-Thread嵌入式软件大赛**,针对**STM32、ESP32**等主流平台,从物联网终端、人机交互等典型场景出发,提供从环境搭

ciya3282的博客 453

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

rtthread - FMT 飞控 各个 uart 串口的绑定和初始化流程

设备初始化 init 操作而是通过调用rt_device_open()接口会自动检测设备的初始化,如果 open 打开设备之前 没有执行初始化则默认会调用设备初始化接口按驱动默认配置进行初始化设备。接口注册到IO设备管理器总线时,并不执行初始化操作。在rtthread中,设备驱动通过。

蒲公英的诗与远方 410

STM32开发环境搭建全攻略:MDK Keil5、ST-LINK驱动与串口驱动配置详解

嵌入式开发的核心在于构建一个能够与微控制器高效交互的完整工具链。其基本原理是通过集成开发环境(IDE)编写和编译代码,借助调试器驱动实现程序烧录与在线调试,并利用通信驱动建立芯片与上位机之间的数据交换通道。这套工具链的技术价值在于为开发者提供了从代码编写到硬件验证的闭环工作流,是进行实时控制、物联网设备开发等嵌入式应用的基础。在实际应用场景中,针对STM32这类基于ARM Cortex-M内核的流行微控制器,MDK Keil5因其与ARM编译器的深度集成、完善的芯片支持包生态以及强大的调试功能,成为平衡功能

weixin_33733810的博客 351

RTT之添加串口设备

如题所示:如何往BSP工程里面添加一个串口设备呢?? 遇到的问题:如下图:#include +相对路径的形式: 答: #include <stdio.h>,直接到系统指定目录去查找头文件。 #include "stidio.h",会先到当前目录查找头文件,如果没找到在到系统指定目录查找。 gcc编译时查找头文件,按照以下路径顺序查找: 1. gcc编译时,可以设置-I选项以指定头文件的搜索路径,如果指定多个路径,则按照顺序依次查找。 2. gcc会查找环境变量C_INCLUD.

guangod的博客 1303

Keil MDK v5.38安装激活与STM32开发环境搭建全攻略

嵌入式开发中,集成开发环境(IDE)是连接代码与硬件的重要桥梁,其核心价值在于提供完整的编译、调试和项目管理工具链。Keil MDK作为ARM Cortex-M系列微控制器的主流IDE,通过其µVision界面、ARM编译器及设备支持包(DFP)的模块化设计,实现了高效的嵌入式软件开发。对于STM32等热门芯片,一个稳定且正确激活的Keil环境是进行裸机编程、RTOS应用乃至驱动开发的工程实践基础。本文聚焦于Keil MDK v5.38的详细安装步骤、授权激活原理以及芯片包管理,并深入解析了环境搭建过程中的

weixin_30654583的博客 390
上一篇: keil rt-thread link.sct 解析
下一篇: rtthread rtconfig.h配置说明-内存管理配置
returningprodigal
博客等级 码龄12年 53粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值