第一章:RTOS基础与FreeRTOS概述
各位同学好,我是你们这门课的老张。做嵌入式这些年,从裸机跑到RTOS,踩过的坑能装一箩筐。今天咱们先聊聊最基础的东西——RTOS到底是什么,FreeRTOS凭什么这么流行,以及为什么我选GD32V来做这个实战课。
1.1 实时操作系统:不只是“快”那么简单
很多人一听到“实时”,就觉得是“快”。其实不然。实时操作系统的核心是确定性——你得保证某个任务在指定时间内完成,而不是越快越好。
举个例子。我在做工业控制器时,有个任务需要每10ms采集一次传感器数据。裸机写轮询也能做到,但一旦加了网络协议栈、显示刷新,主循环一乱,采集周期就飘了。这就是没有RTOS的痛点。
RTOS的核心特征:
- 任务调度:多任务并发执行,看起来像同时运行
- 中断管理:快速响应外部事件
- 资源同步:信号量、互斥锁、消息队列
- 时间确定性:最坏情况执行时间可预测
你想想看,如果只是跑个LED闪烁,裸机完全够用。但一旦系统里有3个以上需要周期性执行的任务,再加上中断响应,RTOS的优势就出来了。
1.2 任务调度机制:谁先跑,谁后跑
调度器是RTOS的大脑。FreeRTOS用的是抢占式优先级调度,说白了就是:优先级高的任务随时可以打断优先级低的任务。
我刚开始用FreeRTOS时犯过一个低级错误——把所有任务优先级都设成一样。结果呢?系统一直在轮转,高优先级的紧急任务得不到及时响应。后来才明白,优先级设计是RTOS调优的第一步。
| 调度策略 | 说明 | 适用场景 |
|---|---|---|
| 抢占式调度 | 高优先级任务就绪时,立即抢占CPU | 实时性要求高的系统 |
| 时间片轮转 | 同优先级任务轮流执行固定时间片 | 多个同等重要任务 |
| 协作式调度 | 任务主动让出CPU | 简单系统,资源受限 |
FreeRTOS默认是抢占式,但也可以配置成协作式。我个人习惯——除非内存实在不够,否则都用抢占式。因为协作式一旦有个任务忘了让出CPU,整个系统就卡死了。
1.3 FreeRTOS的特点与优势
市面上RTOS不少,uC/OS、RT-Thread、ThreadX……为什么FreeRTOS用得最广?我总结了几点:
- 开源免费:商业项目不用交钱,这点太重要了
- 代码精简:核心代码只有几个C文件,移植起来不费劲
- 社区庞大:遇到问题一搜就有答案
- 生态丰富:AWS、Amazon都在推,云连接方案现成
我的经验:FreeRTOS的配置项非常多,但别一上来就全打开。我建议先跑通最小系统,再逐步加功能。否则出了问题,你都不知道是哪个配置引起的。
FreeRTOS的内核对象也很清晰:任务、队列、信号量、互斥锁、事件组、任务通知。这些基本够覆盖90%的应用场景。
1.4 GD32V平台选型分析
为什么选GD32V?说白了,这是国产RISC-V芯片里性价比最高的之一。我去年帮一个客户做边缘计算节点,对比了好几款芯片,最后选了GD32VF103。
| 参数 | GD32VF103 | STM32F103 |
|---|---|---|
| 内核 | RISC-V RV32IMAC | ARM Cortex-M3 |
| 主频 | 108MHz | 72MHz |
| Flash | 128KB | 128KB |
| SRAM | 32KB | 20KB |
| 价格 | 约¥8 | 约¥15 |
你看,主频更高、内存更大、价格更低。而且RISC-V指令集是开源的,不受ARM授权限制。嗯,这里要注意——GD32V的中断控制器和标准RISC-V有些差异,移植FreeRTOS时需要做适配,这个我们后面章节会详细讲。
1.5 本章知识体系
下面这张图是我自己画的,把本章的核心知识点串起来了。你可以把它当作整个课程的地图。
重要提醒:本章是理论基础,但别觉得枯燥就跳过。我曾经带过一个学员,直接跳到移植章节,结果连任务优先级和中断优先级的关系都没搞明白,调试了三天。基础打牢,后面才走得快。
1.6 小结
这一章我们聊了:
- RTOS的核心是确定性,不是单纯的速度快
- FreeRTOS用抢占式调度,优先级设计是关键
- FreeRTOS开源、轻量、生态好,适合做实战教学
- GD32V性价比高,但中断控制器需要特殊适配