1. 从点灯开始认识FreeRTOS
第一次接触FreeRTOS是在五年前的一个智能家居项目。当时需要在STM32上同时控制LED灯、读取温湿度传感器数据,还要处理无线通信。如果用传统的裸机编程,各种延时和中断会让代码变成一团乱麻。直到同事推荐了FreeRTOS,这个仅有9KB内核的小家伙彻底改变了我的开发方式。
实时操作系统(RTOS)就像个精明的管家。想象你正在厨房做饭:煤气灶上炖着汤(高优先级任务),烤箱烤着面包(中等优先级),同时还要切菜(低优先级)。好的管家会确保汤不会烧糊(实时性),面包准时出炉(时间管理),切菜工作见缝插针执行(任务调度)。FreeRTOS就是这样的管家,它的抢占式调度器能立即响应关键事件,比如当汤锅沸腾时,会马上暂停切菜去调小火力。
在STM32F103C8T6开发板上,用FreeRTOS创建两个LED任务只需不到20行代码:
c复制void vTaskBlinkRed(void *pvParameters) {
while(1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1); // 红灯每秒闪一次
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void vTaskBlinkGreen(void *pvParameters) {
while(1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2); // 绿灯每2秒闪一次
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
int main(void) {
xTaskCreate(vTaskBlinkRed, "RedLED", 128, NULL, 1, NULL);
xTaskCreate(vTaskBlinkGreen, "GreenLED", 128, NULL, 2, NULL);
vTaskStartScheduler(); // 启动调度器
}
这个简单例子展示了FreeRTOS的核心能力:多任务并行。虽然MCU只有一个核心,但通过快速任务切换(通常仅需几微秒),
