rt-thread 线程调度优先级
更多
好的,RT-Thread 的线程调度优先级机制如下所述(使用中文描述):
-
优先级数值范围:
- 默认配置下,RT-Thread 采用 256 个线程优先级。
- 优先级数值的范围通常是 0 到 255 (即
RT_THREAD_PRIORITY_MAX - 1,其中RT_THREAD_PRIORITY_MAX默认是 256)。 - 这个范围(数值大小)可以在配置系统时 (
rtconfig.h) 进行调整。
-
数值大小的含义:
- 数值越小,优先级越高。
- 优先级 0 是系统的最高优先级。
- 优先级 255(或配置的最大值减一)是系统的最低优先级。
- 例如:一个优先级为 2 的线程比优先级为 5 的线程有更高的执行权,会被调度器优先选择运行。
-
调度策略:
- RT-Thread 是一个实时操作系统内核,因此其核心调度策略是抢占式调度 + 优先级驱动。
- 抢占式调度: 当一个更高优先级的线程就绪(比如由中断唤醒、释放信号量等)时,如果它优先级比当前正在运行的线程高,调度器会立即暂停(抢占)当前运行的低优先级线程,转而执行那个更高优先级的就绪线程。这是实时性的关键保证。
- 优先级驱动: 调度器总是从就绪队列中选择优先级最高的线程来运行。
- 时间片轮询(可选): 对于优先级相同的多个线程,RT-Thread 支持(需要配置)时间片轮询调度(Round-Robin Scheduling)。每个线程运行一个固定的时间片(例如默认 10 个系统时钟 tick),然后调度器让下一个相同优先级的线程运行。在时间片用完前,相同优先级的线程之间不会发生抢占。
- 协作(非必须): 虽然内核提供抢占能力,但一个线程也可以通过调用如
rt_thread_yield()之类的函数,主动放弃 CPU 让给其他同优先级的线程(协作),即使时间片还没用完。这更多是编程风格上的选择。
-
线程状态与调度:
- 调度器的选择范围总是在处于就绪状态(
RT_THREAD_READY)的线程集合中进行。 - 当一个线程从其他状态(如挂起
RT_THREAD_SUSPEND)变为就绪态时,如果它的优先级比当前运行线程高(或相同优先级且开启了时间片轮询,但当前线程时间片用完),就会触发调度器进行重新选择。 - 常见的导致线程状态变化(可能引发调度)的操作包括:创建线程、启动线程、中断服务例程(ISR)唤醒等待资源/事件的线程 (
rt_sem_release,rt_mutex_release,rt_mq_send等)、线程主动睡眠 (rt_thread_delay,rt_thread_sleep)、线程被挂起/恢复 (rt_thread_suspend/rt_thread_resume) 等。 - 从中断退出时(
rt_interrupt_leave()),内核会检查是否有更高优先级线程就绪,如果有,立即触发调度。
- 调度器的选择范围总是在处于就绪状态(
-
优先级反转解决:
- RT-Thread 支持优先级继承(Priority Inheritance Protocol)或优先级置顶(Priority Ceiling Protocol)等机制(需要配置)来处理使用互斥量(
rt_mutex)时可能发生的优先级反转问题,确保实时性。这是一种在更高层次上对优先级调度的保护和增强。
- RT-Thread 支持优先级继承(Priority Inheritance Protocol)或优先级置顶(Priority Ceiling Protocol)等机制(需要配置)来处理使用互斥量(
-
系统线程优先级:
- 主线程(main线程): 应用入口
main()函数运行的线程通常是系统启动后创建的第一个线程,其默认优先级通常是比较低的(比如配置为 10 或 20,具体看配置),不会干扰关键的内核服务线程。 - Idle线程: 系统总会创建一个最低优先级(通常为
RT_THREAD_PRIORITY_MAX - 1,如 255)的空闲线程(idle)。当系统中没有其他就绪线程时,它被调度运行,负责清理资源等。 - 其他系统线程: 如定时器线程、Shell线程(FinSH)等,根据具体功能和需要,它们会被赋予不同的、通常高于主线程但低于实时关键线程的优先级。
- 主线程(main线程): 应用入口
总结关键点:
- 小数值 = 高优先级: 0 最高,255 (或配置的最大值-1) 最低。
- 抢占式: 高优先级线程就绪时,立刻抢占低优先级线程。
- 多级队列: 内核维护一个由优先级索引的就绪队列数组。
- 实时内核: 调度策略优先保证最高优先级任务的及时响应(实时性)。
- 时间片轮询: 仅在同一优先级线程间生效。
理解 RT-Thread 的优先级调度机制对于开发实时嵌入式应用至关重要,它直接决定了关键任务是否能得到及时处理。配置线程优先级时,务必明确任务的实时性要求。
揭秘!基于RT-Thread探究“优先级反转”下的任务调度究竟是什么样的?| 技术集结
本文将基于RT-Thread,结合RT-Trace调试器细化到实际任务调度的粒度,来调试并逐步讲解“
2025-08-17 10:07:20
RT-Thread启动进入就绪态最高优先级线程的全过程与栈帧分析(上)
本文简单讨论RT-Thread在启动后,逐步进入到处于就绪态最高优先级main线程的全过程。部分内容涉及到汇编指令,但通俗易懂。
2023-11-08 12:47:09
RT-Thread学习笔记 --(6)RT-Thread线程间通信学习过程总结
前两篇文章总结了RT-Thread多线程以及多线程同步的学习过程,关于前两篇学习总结,可以查看之前的文章。
资料下载
龙献益
2022-01-25 18:50:59
RT-Thread基于优先级的全抢占式调度算法的实现
一、原理概述RT-Thread 是一款嵌入式实时操作系统(RTOS),同时也是一款优秀的物联网操作系统,相对于裸机的轮询调度算法,它使用的线程(
2022-04-20 14:17:28
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机