欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > RT-Thread学习笔记(一)

RT-Thread学习笔记(一)

2025/5/7 11:35:42 来源:https://blog.csdn.net/2301_76423513/article/details/147259052  浏览:    关键词:RT-Thread学习笔记(一)

RT-Thread学习笔记

  • AIot
  • MMU
  • CPU架构
  • RT-Thread版本
  • 工程创建
  • 时钟配置
  • FinSH
  • 内核
  • RT-Thread内核启动流程

RT-Thread是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统

全称Real Time Thread

AIot

AIot: Artificial Intelligence of Things(人工智能物联网) 的缩写,是 AI(人工智能) 与 IoT(物联网) 的融合。
AIoT = AI + IoT 它指的是在传统物联网中引入人工智能技术,使设备不仅能“联网”,还能“思考”和“决策”。

MMU

MMU 是 Memory Management Unit(内存管理单元) 的缩写,是计算机系统中专门负责内存地址转换与管理的硬件模块。

CPU架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RT-Thread版本

标准版本
在这里插入图片描述

Nano版本
Nano版本是一个精简版,主要用于一些内存较小的芯片结构中
在这里插入图片描述

RT-Thread Smart
类似于Linux系统,像Linux把驱动层和应用层分开一样,RT-Smart分出内核和用户应用层,用户与内核之间有一个系统调用,用于应用层访问内核
在这里插入图片描述
在这里插入图片描述

工程创建

使用RT-Thread Studio 进行工程创建

在这里插入图片描述
在这里插入图片描述

如果没有自己需要的芯片可以点击添加更多,根据需要安装相应的资源包

在这里插入图片描述
在这里插入图片描述

点击确定后即会创建工程

在这里插入图片描述

在这里插入图片描述

通过RT-Thread Studio自带的终端查看串口打印信息
程序的功能是1s打印一次 Hello RT-Thread

在这里插入图片描述
请添加图片描述

时钟配置

board.c 和 board.h 文件是与具体硬件板级相关(BSP,Board Support Package) 的文件,它们是 RT-Thread 启动和移植过程中非常核心的部分
在这里插入图片描述

在这里插入图片描述

这里默认使用的是系统内部的高速时钟,但是板子上有外部高速时钟,修改使用外部的晶振,系统会更稳定

在这里插入图片描述

修改代码,再次编译没有错误请添加图片描述

在这里插入图片描述

程序运行正常

请添加图片描述

FinSH

FinSH:FinSH 是 RT-Thread 提供的一个内置 Shell 命令行解释器,类似于 Linux 的 Shell,用于在运行时通过串口或终端输入命令,调试和控制系统。

在这里插入图片描述

开启FinSH

在这里插入图片描述

默认就是开启的

在这里插入图片描述

为了方便观察FinSH的使用,先将源代码中的While循环注释掉,可以用Ctrl+L快速注释

在这里插入图片描述

除了使用RT-Thread Studio自带的终端窗口,还可以用其他的软件,例如Mobaxterm

在这里插入图片描述

可以看到就是与Linux类似的命令行终端,可以用help命令查看可以使用的命令

请添加图片描述

例如使用list_thread命令查看线程

在这里插入图片描述

内核

内核时操作系统最基础也最为重要的部分

  1. 线程管理(Thread Management)
    提供线程的创建、删除、挂起、恢复、优先级管理、时间片轮转等功能。
    支持抢占式调度、多优先级、时间片轮转调度等。
  2. 调度器(Scheduler)
    负责根据线程优先级和状态选择合适的线程运行。
    支持抢占式调度机制,确保高优先级线程优先运行。
  3. 中断管理(Interrupt Management)
    支持中断嵌套与中断服务函数的注册。
    中断中可切换为线程上下文以处理复杂任务。
  4. 定时器管理(Timer Management)
    提供软定时器功能,支持定时回调任务的调度。
    支持一次性和周期性定时器。
  5. 内存管理(Memory Management)
    支持静态内存分配、动态内存分配、内存池等。
    常用内存管理方式包括:堆管理(rt_malloc)、内存块(mempool)等。
  6. 同步机制(Synchronization)
    包括信号量、互斥锁(Mutex)、事件(Event)、邮箱(Mailbox)、消息队列(Message Queue)等。
    用于多线程间的同步与通信。
  7. 时钟系统(Clock System)
    提供系统节拍(tick)支持,是整个RTOS时间管理的基础。
    影响定时器、线程延时、调度器等功能。
  8. 钩子函数(Hooks)
    提供线程创建、删除、切换、空闲等阶段的钩子机制,便于调试与扩展。
  9. 空闲线程(Idle Thread)
    系统在没有其他线程可运行时执行空闲线程。
    可在其中处理系统清理或功耗控制等任务。

在这里插入图片描述

RT-Thread内核最小的资源占用情况时 3KB ROM1.2KB RAM

线程: 线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。支持256个线程优先级(也可通过配置文件更改为最大支持32个或8个线程优先级,针对STM32默认配置是32个线程优先级),0优先级代表最高优先级,最低优先级留给空闲线程使用;同时它也支持创建多个具有相同优先级的线程,相同优先级的线程间采用时间片的轮转调度算法进行调度,使每个线程运行相应时间;另外调度器在寻找那些处于就绪状态的具有最高优先级的线程时,所经历的时间是恒定的,系统也不限制线程数量的多少,线程数目只和硬件平台的具体内存相关。

时钟管理: RT-Thread 的时钟管理以时钟节拍为基础,时钟节拍是RT-Thread 操作系统中最小的时钟单位。RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动的停止定时器否则将永远持续执行下去。“另外,根据超时函数执行时所处的上下文环境,RT-Thread 的定时器可以设置为 HARD TIMER 模式或者 SOFT TIMER 模式。←通常使用定时器定时回调函数(即超时函数),完成定时服务。用户根据自己对定时处理的实时性要求选择合适类型的定时器。

线程间同步: RT-Thread 采用信号量、互斥量与事件集实现线程间同步。线程通过对信号量、互斥量的获取与释放进行同涉;互斥量采用优先级继承的方式解决了实时系统常见的优先级翻转问题。线程同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥量。线程通过对事件的发送与接收进行同步;事件集支持多事件的“或触发”和“与触发”,适合于线程等待多个事件的情况。

线程间通信: RT-Thread 支持邮箱和消息队列等通信机制。邮箱中一封邮件的长度固定为4字节大小;消息队列能够接收不固定长度的消息,并把消息缓存在自己的内存空间中。邮箱效率较消息队列更为高效。邮箱和消息队列的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。

内存管理: RT-Thread 支持静态内存池管理及动态内存堆管理。当静态内存池具有可用内存时,系统对内存块分配的时间将是恒定的;当静态内存池为空时,系统将申请内存块的线程挂起或阻塞掉(即线程等待一段时间后仍未获得内存块就放弃申请并返回,或者立刻返回。等待的时间取决于申请内存块时设置的等待时间参数),当其他线程释放内存块到内存池时,如果有挂起的待分配内存块的线程存在的话,则系统会将这个线程唤醒。“动态内存堆管理模块在系统资源不同的情况下,分别提供了面向小内存系统的内存管理算法及面向大内存系统的 SLAB内存管理算法。还有一种动态内存堆管理叫做memheap,适用于系统含有多个地址可不连续的内存堆。使用memheap可以将多个内存堆“粘贴”在一起,让用户操作起来像是在操作一个内存堆。

I/O设备管理: RT-Thread将PIN、I2C、SPI、USB、UART等作为外设设备,统一通过设备注册完成。实现了按名称访问的设备管理子系统,可按照统一的API界面访问硬件设备。在设备驱动接口上,根据嵌入式系统的特点,对不同的设备可以挂接相应的事件。当设备事件触发时,由驱动程序通知给上层的应用程序。这也很像Linux系统。

RT-Thread内核启动流程

RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread规定的统一启动入口。一般执行顺序是:系统先从启动文件(即汇编文件)开始运行,然后进入 RT-Thread 的启动 rtthread_startup(),最后进入用户入口 main()

请添加图片描述

先执行启动文件,汇编文件位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对时钟等进行初始化

在这里插入图片描述

最后跳转到入口函数

在这里插入图片描述

在这里插入图片描述

进行初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

即执行 main_thread_entry() 函数,最终还是执行main函数

在这里插入图片描述

即这个函数,对应用户层

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词