STM32 RTOS 系列教學 - 第二篇:多任務與任務切換(雙 LED 閃爍)
🎯 教學目標
- 建立多個 RTOS Task
- 觀察 RTOS 的任務切換運作方式
- 實作雙 LED 閃爍功能
📚 RTOS 多任務概念
RTOS 支援多任務(Multi-tasking)機制,每個任務都是獨立的執行單元,能透過 scheduler 依據優先權與排程策略輪流執行。
RTOS 排程器會:
- 根據任務優先順序分配 CPU 使用時間
- 任務之間可透過延遲(
osDelay())進行時間讓渡 - 支援同步與互斥(未來章節會提)
🛠 STM32CubeMX 設定(延續第一篇專案)
Step 1:新增第二個 Task
- 開啟你的專案(或從第一篇延續)
Middleware > FREERTOS > Tasks and Queues- 新增一個任務,例如
blinkTask2,對應函式:StartBlinkTask2 - 建議 stack size:
128、priority:Low(低於 defaultTask)
Step 2:設定第二顆 LED 的 GPIO
- 假設第一顆 LED 使用
PC13 - 新增另一個 GPIO,例如
PA5,設定為GPIO_Output
Step 3:產生程式碼
- 點選
Project > Generate Code,進入 IDE 編輯
🧪 編寫雙 Task 閃爍程式
修改 StartDefaultTask() 函式:
void StartDefaultTask(void *argument)
{
for(;;)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 第一顆 LED
osDelay(500);
}
}
實作第二個任務 StartBlinkTask2():
void StartBlinkTask2(void *argument)
{
for(;;)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 第二顆 LED
osDelay(200);
}
}
✅ 成功條件檢查
- 程式編譯成功
- 上電後兩顆 LED 分別以不同頻率閃爍
- 無卡死或異常閃爍
🧩 下一篇預告
第 3 篇:RTOS 任務間通訊(Queue 與 Semaphore 實作)