FreeRTOS學習 二 任務掛起和恢復

2021-09-08 09:01:18 字數 821 閱讀 1551

宣告及感謝: 跟隨正點原子資料學習, 在此作為學習的記錄和總結

環境 keil , stm32f103

1.任務掛起

vtasksuspend(task1task_handler) // 引數傳入任務控制代碼

2.任務恢復

任務恢復有兩種情況,

第一種: 在非中斷中恢復

vtaskresume(task1task_handler); // 引數為任務控制代碼 即可恢復任務

注意: 只有通過函式vtasksuspend()設定為掛起態的任務才可以用vtaskresume()恢復

第二種: 在中斷服務函式中恢復任務

xtaskresumefromisr(task2task_handler); // 引數為任務控制代碼,即可恢復任務

注意: 返回值

返回 pdtrue 表示恢復執行的任務的優先順序等於或高於正在執行的任務(被中斷打斷的任務)

這意味著在退出中斷服務函式以後必須進行一次上下文切換.

上下文切換使用 portyield_from_isr(pdtrue);

返回 pdfalse 恢復執行的任務的優先順序的任務優先順序低於當前正在執行的任務(被中斷打斷的任務), 這意味

在退出中斷函式以後不需要進行上下文切換.

例項:

// 外部中斷4服務程式

void exti4_irqhandler(void)

}

exti_clearitpendingbit(exti_line4);// 清除line4上的中斷標誌位

}

FreeRTOS學習(二)任務基礎

2.任務基礎知識 在嵌入式開發中,有兩種常見的開發方式 前後臺系統和嵌入式作業系統。1.1 前後臺系統 前台 就是中斷,可以多級巢狀,處於處理一些實時性要求比較高的事件,比如按鍵的狀態獲取。後台 乙個無限迴圈,在迴圈中呼叫相關函式完成相應操作。這種程式設計方式的主要缺陷在於兩方面 1 複雜度方面 無...

FreeRTOS 作業系統學習(二) 任務

freertos 作業系統學習 1.任務 1.1 freertos 中的任務 只要硬體和記憶體足夠,freertos 執行的任務數量不受限制,作為乙個實時作業系統,freertos 同時支援迴圈和非迴圈任務。在 rtos 中,任務由乙個簡單的c函式定義,引數為void 型別,無返回值 void 用些...

(二)任務堆疊

任務堆疊的建立 1 為了方便定義任務堆疊,在檔案os cpu.h中定義了乙個資料型別os stk typedef unsigned int os stk 該型別長度為16位 2 在定義任務堆疊的棧區時,只要定義乙個os stk型別的陣列即可。例如 define task stk size 512 定...