RTOS基础(TODO)
(TODO)
读完FreeRTOS内核源码,需要多久?
有哪些情况下是RTOS满足不了需求,必须得上嵌入式Linux系统的?
============================
如何用树莓派 Pico 学习 RTOS?
树莓派 Pico 使用 RP2040 微控制器,基于 ARM Cortex-M0+ 内核,支持各种 RTOS(实时操作系统)。如果你想学习 RTOS,Pico 是一个很好的平台,以下是系统学习路径:
1. 选择合适的 RTOS
常见的 RTOS 选项:
- FreeRTOS(最流行,学习资料多)
- RT-Thread(国产 RTOS,适合 IoT)
- Zephyr(适用于物联网和工业)
- ChibiOS(轻量级,适合小型 MCU)
推荐:FreeRTOS 最适合作为入门 RTOS,官方支持好,教程多,使用广泛。
2. 准备开发环境
硬件
- Raspberry Pi Pico
- Micro-USB 线
- LED、按钮、传感器(扩展实验)
软件
- CMake + Ninja + ARM GCC(官方推荐)
- VS Code + Pico SDK(推荐)
- 或者 Keil / IAR(传统嵌入式开发工具)
3. 安装 FreeRTOS 并配置开发环境
(1) 下载 FreeRTOS
git clone https://github.com/FreeRTOS/FreeRTOS-Kernel.git
或者使用官方仓库:
git clone --recurse-submodules https://github.com/FreeRTOS/FreeRTOS.git
(2) 安装 Raspberry Pi Pico SDK
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
export PICO_SDK_PATH=$PWD
(3) 配置 FreeRTOS 任务调度器
在 FreeRTOSConfig.h
中修改:
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configCPU_CLOCK_HZ (125000000) // RP2040 125MHz
#define configTICK_RATE_HZ (1000)
#define configMAX_PRIORITIES (5)
#define configMINIMAL_STACK_SIZE (configSTACK_DEPTH_TYPE)128
#define configTOTAL_HEAP_SIZE ((size_t)(16 * 1024))
4. 编写一个 FreeRTOS 任务
创建 main.c
,写入以下代码:
#include <FreeRTOS.h>
#include <task.h>
#include <stdio.h>
#include "pico/stdlib.h"
void Task1(void *pvParameters) {
while (1) {
printf("Task 1 running...\n");
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void Task2(void *pvParameters) {
while (1) {
printf("Task 2 running...\n");
vTaskDelay(pdMS_TO_TICKS(500));
}
}
int main() {
stdio_init_all();
xTaskCreate(Task1, "Task 1", 256, NULL, 1, NULL);
xTaskCreate(Task2, "Task 2", 256, NULL, 1, NULL);
vTaskStartScheduler();
while (1);
}
说明
- Task1 每 1000ms 运行一次
- Task2 每 500ms 运行一次
- vTaskStartScheduler() 启动任务调度器
5. 编译 & 运行
(1) 编译代码
mkdir build
cd build
cmake ..
make -j4
(2) 烧录到 Pico
- 进入 BOOTSEL 模式(按住
BOOTSEL
按钮,插入 USB) - 拷贝生成的
.uf2
文件到 Pico
(3) 观察输出
使用 minicom
或 screen
读取串口输出:
screen /dev/ttyUSB0 115200
6. 进阶学习
✅ 任务同步 & 互斥
- 队列(Queue): 任务间通信
- 信号量(Semaphore):资源管理
- 互斥量(Mutex):防止数据竞争
✅ 中断处理
- 使用 ISR-safe API,如
xQueueSendFromISR()
✅ 低功耗管理
- Tickless Idle 模式降低功耗
✅ 移植 & 设备驱动
- 在 FreeRTOS 上移植 I2C/SPI/UART 设备驱动
✅ 联网 & 远程控制
- 结合 LWIP(轻量级 TCP/IP) 使 Pico 具备联网功能
7. 推荐学习资源
📚 书籍
- 《Mastering FreeRTOS》
- 《嵌入式实时操作系统开发》
- 《实时操作系统(RTOS)基础》
🎥 视频
- YouTube - FreeRTOS for Beginners
📂 官方文档
- FreeRTOS 官方文档
- Pico SDK 文档
总结
🔹 用 Raspberry Pi Pico 学习 FreeRTOS 是个很好的选择! 🔹 从简单的任务调度开始,再深入学习任务间通信、中断管理、功耗优化 🔹 Pico 的双核支持,适合研究 FreeRTOS SMP(多核调度)
你对哪个方面最感兴趣?我可以帮你定制更详细的学习计划!🚀