打印
[其他]

RT-Thread与FreeRTOS优先级管理对比

[复制链接]
1377|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Puchou|  楼主 | 2025-5-9 12:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 创建线程(任务)时优先级的区别
1.1 FreeRTOS
概念名称:任务(Task)
优先级取值范围:
0 ~ (configMAX_PRIORITIES - 1)
数字越大,优先级越高
指定优先级方式:
创建任务时,调用 xTaskCreate() 或 xTaskCreateStatic() 指定优先级
调度机制:
优先调度优先级数字大的任务
同优先级任务默认不轮转,需要配置 configUSE_TIME_SLICING = 1
空闲任务:
优先级通常为 0(最低)
1.2 RT-Thread
概念名称:线程(Thread)
优先级取值范围:
0 ~ (RT_THREAD_PRIORITY_MAX - 1),默认是0~31
数字越小,优先级越高
指定优先级方式:
创建线程时,调用 rt_thread_create() 或 rt_thread_init() 指定优先级
调度机制:
优先调度优先级数字小的线程
同优先级线程默认支持时间片轮转
空闲线程:
优先级为最大值(最低优先级)
1.3 核心对比表



2. 优先级链表插入方式的区别
2.1 FreeRTOS
就绪链表结构:
每个优先级一个链表,链表数组大小为 configMAX_PRIORITIES
插入逻辑:
新建任务插入对应优先级链表的末尾
时间片轮转开启后,每次tick到时,将当前运行任务重新插到链表末尾
调度逻辑:
从优先级数字大到小遍历,找到最高优先级的非空链表,调度链表头部任务
2.2 RT-Thread
就绪链表结构:
每个优先级一个链表,链表数量为 RT_THREAD_PRIORITY_MAX
插入逻辑:
默认新线程插入到链表末尾(支持时间片轮转)
特殊情况下可以选择插入链表头部(加速响应)
调度逻辑:
从优先级数字小到大遍历,找到最高优先级的非空链表,调度链表头部线程
2.3 核心对比表



3. 小结
FreeRTOS优先级数字越大越高,RT-Thread数字越小越高。
FreeRTOS同优先级默认不轮转,需要手动开启时间片;RT-Thread默认支持时间片轮转。
两者都通过每个优先级一个链表管理就绪线程(任务),插入链表时有不同策略,影响多任务调度行为。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/hallo_zz/article/details/147544927

使用特权

评论回复
沙发
zhengshuai888| | 2025-5-14 08:44 | 只看该作者
嵌入式的OS原理基本上相差不大

使用特权

评论回复
板凳
huquanz711| | 2025-5-17 15:06 | 只看该作者
原理都差不多,只是执行或处理方式有点区别。。

使用特权

评论回复
地板
小夏天的大西瓜| | 2025-5-27 09:24 | 只看该作者
FreeRTOS优先级数字越大越高,RT-Thread数字越小越高。
FreeRTOS同优先级默认不轮转,需要手动开启时间片;RT-Thread默认支持时间片轮转

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

120

帖子

0

粉丝