微信公众号 | strongerHuang
2000年左右,全球MCU市场还是以51单片机为主,那个时候32位MCU刚刚兴起还没有普及,而应用于MCU的RTOS大多都需要商业收费。
于是,2003年,一位英国工程师 Richard Barry推出了免费的FreeRTOS。聪明的你肯定猜到了FreeRTOS这个名称的由来,没错,就是主打一个Free(自由、免费)。
FreeRTOS问世的那个年代,单片机的性能和存储资源都还是比较有限,于是,FreeRTOS一个特点就是:轻量级、可裁剪!
那个时候,51单片机是主流,但32位MCU已经开始慢慢发展起来。同时,市场的需求也在变化,设备功能越来越复杂,传统的裸机循环编程【while(1)+中断】模式难以满足这些需求。
所以,FreeRTOS设计的目标就不能只是面向于51单片机,还要考虑未来主流的32位单片机、更复杂的应用场景等,同时,为了规范,代码还要严格遵循 MISRA-C 标准。
于是,在那样的情况下,作者Richard Barry推出 FreeRTOS V1.0初始版本,其内核只有 3 个 .c 文件:tasks.c、list.c 和 queue.c源代码文件。
┌─────────────────────────────────────────────────┐│ tasks.c ││ 任务创建/删除/调度/优先级管理/上下文切换入口 ││ │ ││ ▼ ││ ┌──────────────┐ ┌──────────────┐ ││ │ list.c │◄──►│ queue.c │ ││ │ 双向循环链表 │ │ 队列/信号量 │ ││ │ (就绪列表) │ │ (同步/通信) │ ││ │ (阻塞列表) │ │ │ ││ │ (事件列表) │ │ │ ││ └──────────────┘ └──────────────┘ │└─────────────────────────────────────────────────┘│▼portable/[compiler]/[arch]/port.c ← 移植层(架构相关,不算内核)portable/MemMang/heap_x.c ← 内存管理(V1.0时只有heap_1/2)
V1.0 的设计哲学:够用就好,绝不多写一行代码。 这也是 FreeRTOS 能跑在几KB Flash 上的根本原因。作者Richard Barry 的原话:"Small, simple, easy to understand"(小、简单、易理解)。
现在大家看到的timers.c、heap_1~5.c、port.c等这些源代码文件,都是后面逐渐增添的。
FreeRTOS发展时间线
2003年 Richard Barry 发布 FreeRTOS v1.0(GPLv2)↓2008年 Amazon 开始在内部使用 FreeRTOS↓2017年 Amazon 正式收购 FreeRTOS↓2018年 许可证改为 MIT,发布 V10.0↓2020年 首个 LTS 版本发布(202012.00 LTS)↓2023年 全球RTOS市场份额 ~38%,Cortex-M采用率 >60%↓2026年 已成为 ARM Cortex-M 生态的"事实标准"
为什么能如此火爆?
① 极致轻量——"小到不可思议"
| 指标 | 数据 |
|---|---|
| 内核代码 | 仅 3个C文件 |
| ROM占用 | 最小 4~9 KB |
| RAM占用 | 不到 1 KB |
| 最小配置 | 几KB Flash的单片机都能跑 |
对比:μC/OS-II 内核约6~10KB ROM,VxWorks 更是动辄几百KB。FreeRTOS 做到了"能省则省"。
② MIT许可证——"真正的自由"
这是FreeRTOS最具杀伤力的武器之一:
| 许可证 | 商业使用 | 可闭源衍生 | 版权费 |
|---|---|---|---|
| GPLv2(2018年前) | ✅ | ❌ 必须开源 | 免费 |
| MIT(2018年后) | ✅ | ✅ 可以闭源 | 免费 |
2017年亚马逊收购后,将许可证从 GPLv2 改为 MIT,这意味着:
公司做商业项目完全没有法律压力,修改源码后可以闭源销售。这直接打掉了商业RTOS最大的竞争壁垒。
③ 超强可移植性——"一套代码,通吃天下"
a、纯 ANSI C 编写,兼容 GCC、Keil、IAR、MPLAB 等所有主流编译器b、已移植到
40+ 处理器架构:ARM Cortex-M/R、RISC-V、Xtensa(ESP32)、8051、AVR、PIC32、MIPS……c、从8位到32位MCU全覆盖
308