RT-Thread快速入门(九)之总结与知识图谱
前言从第一篇线程创建与删除到第八篇事件集我们走完了 RT-Thread 内核的完整学习路径。本文将对整个系列进行系统性总结整理成一张清晰的知识图谱方便回顾和查阅。RT-Thread快速入门一之线程创建与删除-CSDN博客RT-Thread快速入门二之线程优先级和Tick-CSDN博客RT-Thread快速入门三之Delay函数和空闲线程-CSDN博客RT-Thread快速入门四之消息队列-CSDN博客RT-Thread快速入门五之邮箱-CSDN博客RT-Thread快速入门六之信号和信号量_rt信号量和信号-CSDN博客RT-Thread快速入门七之互斥量-CSDN博客RT-Thread快速入门八之事件集-CSDN博客目录前言一、系列内容总览二、知识图谱2.1 RT-Thread 内核知识分层2.2 IPC 选型决策树三、核心 API 速查表3.1 线程管理3.2 IPC 机制四、重要规则与注意事项4.1 创建方式对照4.2 阻塞与非阻塞4.3 中断中可用性4.4 宏配置开关五、常见问题 FAQQ1动态创建和静态创建怎么选Q2线程栈大小怎么确定Q3优先级设多少合适Q4rt_sem_release() 的返回值到底是什么意思Q5互斥量和二值信号量有什么区别Q6消息队列满/空时怎么办Q7事件集的 AND 和 OR 可以同时用吗Q8信号和信号量名字这么像怎么记六、学习路线图七、写在最后一、系列内容总览篇目标题核心内容一线程创建与删除静态线程rt_thread_init、动态线程rt_thread_create、启动、删除、线程组成二线程优先级与时间片优先级范围、Tick 与时间片、抢占式时间片轮转、线程 5 种状态三Delay函数与空闲线程阻塞延时 vs 忙等待、空闲线程职责、空闲钩子与调度器钩子四消息队列FIFO 链表、send/send_wait/urgent/recv、拷贝 vs 传指针、数据源分辨五邮箱环形缓冲区、4 字节固定邮件、send/send_wait/recv、与消息队列选型六信号和信号量信号软中断与信号量计数器的本质区别、Give/Take 机制七互斥量所有权保护、优先级反转与优先级继承、ISR 中不可用八事件集32 位标志位、AND/OR 组合、广播唤醒、可选清除二、知识图谱2.1 RT-Thread 内核知识分层┌─────────────────────────────────────────────────────┐ │ 应用层 │ │ 多线程程序、线程间通信/同步、资源管理 │ ├──────────┬──────────┬──────────┬──────────────────────┤ │ IPC │ IPC │ IPC │ 线程控制 │ │ 数据传递 │ 同步 │ 互斥 │ │ ├────┬─────┼────┬─────┼────┬─────┼────┬─────┬──────────┤ │消息│ 邮箱 │信号│信号量│互斥│事件集│创建│优先级│延时与 │ │队列│ │ │ │量 │ │删除│与 │空闲线程 │ │ │ │ │ │ │ │ │Tick │ │ ├────┴──┬──┴──┬─┴──┬───┴──┬─┴──┬──┴──┬──┴──┬───┴──────────┤ │ (四) │ (五)│ (六)│ (六) │ (七)│ (八)│ (一)│ (二)(三) │ └────────┴─────┴────┴──────┴─────┴─────┴─────┴─────────────┘2.2 IPC 选型决策树需要在线程间传递什么 │ ├─ 需要传递一整块数据/结构体 │ └─→ 消息队列四 │ ├─ 只需要传递一个小数值如状态码、计数值 │ └─→ 邮箱五 │ ├─ 只需要通知对方有资源可用不需要传具体数据 │ ├─ 单个资源计数 → 信号量六 │ └─ 多个条件组合AND/OR→ 事件集八 │ ├─ 需要保护共享资源不被同时访问 │ └─ 互斥量七 │ └─ 需要异步通知对方打断对方当前执行 └─ 信号六三、核心 API 速查表3.1 线程管理函数说明出现篇章rt_thread_create(name, entry, param, stack, prio, tick)动态创建线程一rt_thread_init(thread, name, entry, param, stack_addr, size, prio, tick)静态创建线程一rt_thread_startup(thread)启动线程一rt_thread_delete(thread)删除动态线程空闲线程回收一rt_thread_detach(thread)脱离静态线程一rt_thread_mdelay(ms)毫秒延时阻塞让出 CPU三rt_thread_delay(tick)Tick 延时三rt_thread_control(thread, cmd, arg)控制线程修改优先级等二3.2 IPC 机制函数说明出现篇章rt_mq_create/init创建消息队列四rt_mq_send/send_wait/urgent发送消息普通/等待/紧急四rt_mq_recv接收消息四rt_mb_create/init创建邮箱五rt_mb_send/send_wait发送邮件五rt_mb_recv接收邮件五rt_sem_create/init创建信号量六rt_sem_take/trytake获取信号量阻塞/非阻塞六rt_sem_release释放信号量六rt_mutex_create/init创建互斥量七rt_mutex_take/trytake获取互斥量七rt_mutex_release释放互斥量仅持有者可调七rt_event_create/init创建事件集八rt_event_send发送事件八rt_event_recv接收事件AND/OR/CLEAR/超时八rt_signal_install安装信号处理函数六rt_thread_kill发送信号六四、重要规则与注意事项4.1 创建方式对照方式内存分配删除函数适用场景xxx_create动态系统自动从堆分配xxx_delete灵活运行时决定xxx_init静态用户事先分配xxx_detach资源受限编译时确定适用于rt_thread、rt_mq、rt_mb、rt_sem、rt_mutex、rt_event4.2 阻塞与非阻塞函数含义场景xxx_take(obj, RT_WAITING_FOREVER)一直等直到拿到资源必须获取到资源才能继续xxx_take(obj, 0)不等待拿不到就返回试试看拿不到就做别的事xxx_take(obj, 100)最多等 100 Tick设个闹钟超时就退出xxx_trytake(obj)尝试不等待等同于take(obj, 0)4.3 中断中可用性机制ISR 中可用说明消息队列send/urgent✅仅发送不可接收邮箱send✅仅发送不可接收信号量release✅仅释放互斥量❌不可用需要线程身份涉及优先级继承事件集send✅仅发送不可接收信号❌仅线程间发送延时函数mdelay❌ISR 中不能阻塞4.4 宏配置开关宏定义功能默认状态RT_USING_SIGNALS开启信号功能❌ 关闭RT_USING_IDLE_HOOK开启空闲钩子❌ 关闭RT_THREAD_PRIORITY_MAX优先级级数32RT_TICK_PER_SECONDTick 频率1000五、常见问题 FAQQ1动态创建和静态创建怎么选答拿不准就用动态。动态更灵活坏处是如果创建失败堆不足需要做错误处理。静态在编译时就分配好内存适合资源受限的 MCU或者对实时性要求极高的场合避免运行时动态分配的开销。Q2线程栈大小怎么确定答初始设大一点如 1024 字节运行时在终端输入list_thread查看max used列使用率 70%→ 栈偏小需要加大使用率 30%→ 栈偏大可以减小以节省内存Q3优先级设多少合适答根据任务紧急程度分配。通常优先级分配给0~5实时性要求极高的任务中断等效5~15普通周期任务传感器采集、控制15~25后台任务显示刷新、日志记录最低空闲线程用户不应使用注意优先级过高且不主动挂起会导致低优先级线程饿死。Q4rt_sem_release()的返回值到底是什么意思答RT_EOK0释放成功信号量值累加了 1说明没有线程在等RT_TRUE1释放成功并且唤醒了一个等待的线程信号量值不变Q5互斥量和二值信号量有什么区别答核心区别在于所有权对比二值信号量互斥量谁可以释放任何线程/ISR仅持有者优先级继承❌✅ISR 中可用✅❌信号量用于计数/同步互斥量用于资源互斥——选哪个取决于你的场景而不是值范围。Q6消息队列满/空时怎么办答取决于你调用的函数rt_mq_send(mq, buf, size); // 满时立即返回 -RT_EFULL rt_mq_send_wait(mq, buf, size, 100); // 满时阻塞 100 Tick等有空间再发 rt_mq_recv(mq, buf, size, FOREVER); // 空时永久等待 rt_mq_recv(mq, buf, size, 0); // 空时立即返回 -RT_ETIMEOUTQ7事件集的 AND 和 OR 可以同时用吗答同一个rt_event_recv()调用中不行——要么 AND 要么 OR。但不同线程可以不同的等待方式比如线程 A 等 AND线程 B 等 OR监听同一个事件集的不同组合。Q8信号和信号量名字这么像怎么记答记住一句话就够了信号Signal像 CPU 中断——打断你、执行处理函数、恢复。信号量Semaphore像排队买包子——数量加减、没得等就排队。六、学习路线图RT-Thread 内核学习路径 ═══════════════════════════════ ​ 第一层线程基础 ┌─────────────────────────────────────┐ │ 一线程创建与删除 │ │ 二线程优先级与时间片 线程状态 │ │ 三延时函数与空闲线程 │ └─────────────────────────────────────┘ │ ▼ 第二层数据传递 IPC ┌─────────────────────────────────────┐ │ 四消息队列 ─── 任意大小数据 │ │ 五邮箱 ─── 4 字节小数据 │ └─────────────────────────────────────┘ │ ▼ 第三层同步与互斥 IPC ┌─────────────────────────────────────┐ │ 六信号量 ─── 计数/同步 │ │ 六信号 ─── 异步软中断 │ │ 七互斥量 ─── 资源互斥优先级继承│ │ 八事件集 ─── 多条件组合等待 │ └─────────────────────────────────────┘ │ ▼ 第四层综合应用 ┌─────────────────────────────────────┐ │ 组合使用线程 IPC 延时 │ │ 实战项目基于 RT-Thread 的智能家居 │ └─────────────────────────────────────┘七、写在最后从一到九我们系统性地学习了 RT-Thread 内核的核心机制领域已掌握线程管理✔ 创建/删除 ✔ 优先级 ✔ 时间片 ✔ 5 种状态 ✔ 延时空闲线程✔ 职责 ✔ 空闲钩子 ✔ 调度器钩子IPC 数据传递✔ 消息队列 ✔ 邮箱IPC 同步✔ 信号量 ✔ 信号软中断IPC 互斥✔ 互斥量优先级继承IPC 多条件✔ 事件集AND/OR这些知识已经覆盖了 RT-Thread 内核 IPC 的全部核心内容。接下来可以进入设备驱动和实战项目阶段了。感谢阅读本系列如有问题或建议欢迎留言交流。

相关新闻

FigmaCN完整指南:5分钟实现Figma全界面中文汉化,设计师工作效率翻倍

FigmaCN完整指南:5分钟实现Figma全界面中文汉化,设计师工作效率翻倍

FigmaCN完整指南:5分钟实现Figma全界面中文汉化,设计师工作效率翻倍 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾因为Figma的英文界面而犹豫不决&…

2026/7/24 21:36:48阅读更多 →
三极与钳式电磁铁|微型多维磁场精密发生设备

三极与钳式电磁铁|微型多维磁场精密发生设备

在微磁学实验、薄膜材料测试、微观磁各向异性研究、精密器件标定等场景中,常规单维度大磁场电磁铁存在体积大、维度单一、无法实现面内/面外复合磁场的短板。小型精密电磁铁凭借结构紧凑、维度灵活、磁场精准、适配微观样品测试的优势,成为微观磁性能研究…

2026/7/24 21:36:48阅读更多 →
3个炉石传说macOS玩家必知的智能助手技巧:HSTracker完全指南

3个炉石传说macOS玩家必知的智能助手技巧:HSTracker完全指南

3个炉石传说macOS玩家必知的智能助手技巧:HSTracker完全指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否曾在激烈的炉石传说对战中,因…

2026/7/24 21:36:48阅读更多 →
5分钟破解Adobe全家桶:GenP 3.0全版本激活指南

5分钟破解Adobe全家桶:GenP 3.0全版本激活指南

5分钟破解Adobe全家桶:GenP 3.0全版本激活指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否因为Adobe Creative Cloud高昂的订阅费用而无法使用…

2026/7/24 23:01:04阅读更多 →
实用高效的Windows驱动管理神器:Driver Store Explorer完全指南

实用高效的Windows驱动管理神器:Driver Store Explorer完全指南

实用高效的Windows驱动管理神器:Driver Store Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否发现…

2026/7/24 23:01:04阅读更多 →
Centos7 编译安装Cmake+ffmpeg

Centos7 编译安装Cmake+ffmpeg

1、系统准备安装好Centos7.9,并打好系统补丁,安装一些常用工具,关闭防火墙,yum -y update yum -y install git yum -y install vim yum -y install unzip yum -y install net-tools yum -y install wget yum -y install openssl-d…

2026/7/24 23:01:04阅读更多 →
Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链

Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链

Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit…

2026/7/24 23:01:04阅读更多 →
电脑机房用成品——名词解释

电脑机房用成品——名词解释

目录 红黑电源隔离插座 PDU(电源分配单元) 电源ac和dc MTBF:平均无故障时间 关于标准机箱、机柜 红黑电源隔离插座 红黑电源隔离插座简称“红黑插座”,是中国国内达到国家保密标准GB2099.3-1997《红黑电源滤波隔…

2026/7/24 23:01:04阅读更多 →
5分钟零基础AI换脸指南:roop-unleashed让你轻松成为面部替换专家

5分钟零基础AI换脸指南:roop-unleashed让你轻松成为面部替换专家

5分钟零基础AI换脸指南:roop-unleashed让你轻松成为面部替换专家 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 还在为复杂的深度学习训练望而…

2026/7/24 22:59:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →