2003 - FreeRTOS 誕生(開放原始碼的即時核心)#
案件摘要#
2003 年,英國工程師 Richard Barry 發布 FreeRTOS:一個約 4,000 行 C、MIT 授權的即時核心。 史上被下載最多、跑進最多晶片的 RTOS——2026 年每小時有數以萬計的新裝置啟動它。
前因 -- 為什麼會有這個案子#
- 商用 RTOS 的授權費:VxWorks、VRTX 一份授權數萬美元,原始碼封閉——彌補的缺陷:封閉又昂貴。
- 微控制器的平民化:ARM Cortex-M(2004)把 32 位元 MCU 價格拉到一美元級——硬體平民化逼出軟體平民化。
- Barry 的洞察:嵌入式世界有上千種晶片——只有開放原始碼 + 極簡可移植層才能覆蓋這麼多硬體。
線索與推理 -- FreeRTOS 的技術面貌(2003)#
| 技術 | FreeRTOS 狀態 | 彌補的缺陷 |
|---|---|---|
| 核心元件 | 任務、佇列、信號量、串流緩衝——就這樣 | 商用 RTOS 功能臃腫 |
| 可移植層 | portable/ 每個 CPU 一小撮組語 | 與硬體耦合 |
| footprint | 約 6KB flash / 1KB RAM 起跳 | 主機 OS 的 1/100000 |
| 授權 | MIT(無 copyleft 負擔) | GPL 嚇跑商業廠商 |
| 排班 | 搶佔式 / 協作式 / 時間片皆可設定 | 一刀切的排班策略 |
C 範例:FreeRTOS 的任務與佇列#
/* FreeRTOS:一切圍繞「任務 + 佇列」 */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
QueueHandle_t xQueue;
void vSensorTask(void *pv) { /* 生產者 */
for (;;) {
int sample = read_sensor();
xQueueSend(xQueue, &sample, portMAX_DELAY);
vTaskDelay(pdMS_TO_TICKS(10));/* 10ms 週期 */
}
}
void vLoggerTask(void *pv) { /* 消費者 */
int v;
for (;;) {
xQueueReceive(xQueue, &v, portMAX_DELAY);
log(v);
}
}
int main(void) {
xQueue = xQueueCreate(8, sizeof(int));
xTaskCreate(vSensorTask, "sensor", 128, NULL, 2, NULL);
xTaskCreate(vLoggerTask, "logger", 128, NULL, 1, NULL);
vTaskStartScheduler(); /* 核心就這麼小 */
for (;;);
}
Shell 範例:交叉編譯與燒錄#
# 交叉編譯 FreeRTOS 專案(Cortex-M)
$ arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -O2 -o app.elf main.c
$ arm-none-eabi-size app.elf
text data bss
6420 12 1048 # flash 6KB、RAM 1KB——footprint 鐵律
$ openocd -f board/st_nucleo_f4.cfg -c "program app.elf"
結案 -- 後果與影響#
- 2017 年 FreeRTOS 被 Amazon 併購,長期安全維護(FreeRTOS LTS)——開源專案的商業庇護模式。
- 徒弟潮:OpenRTOS、SafeRTOS(安全認證版)、各家 CMSIS-RTOS——開源 RTOS 成為主流。
- 物聯網時代:Wi-Fi 模組、藍牙晶片、馬達控制器——幾乎每顆聯網 MCU 都有一份 FreeRTOS。
- 歷史教訓:MIT 授權 + 極簡 + 跨硬體 = 滲透率最高的核心(與 Linux GPL 路線形成對照組)。
關鍵人物與文獻#
- R. Barry:FreeRTOS (2003);《Using the FreeRTOS Real Time Kernel》。
- Amazon / AWS:FreeRTOS LTS (2017)。
- 相關案件:
1993-VxWorks與POSIX即時標準.md、2015-Zephyr與物聯網.md、../UNIX/2013-Docker容器.md。