宣告及感謝: 跟隨正點原子資料學習, 在此作為學習的記錄和總結
環境 keil , stm32f103
1.任務的建立 :
建立任務的方法有三種:
(1) 動態建立:
xtaskcreate();
使用此xtaskcreate函式 需配置 configsupport_dynamic_allocation 巨集定義為1
// 建立開始任務
xtaskcreate((taskfunction_t )start_task, // 任務函式
(const char* )"start_task", // 任務名稱
(uint16_t )start_stk_size, // 任務堆疊大小
(void* )null, // 傳遞給任務函式的引數
(ubasetype_t )start_task_prio, // 任務優先順序
(taskhandle_t* )&starttask_handler); // 任務控制代碼
vtaskstartscheduler(); // 開啟任務排程
(2)靜態建立
xtaskcreatestatic();
與動態建立方法相同 也需要配置乙個巨集定義.
configsupport_static_allocation 為1
當配置configsupport_static_allocation 巨集定義為1後編譯,會出現
兩個錯誤,
消除此錯誤需要自己實現兩個函式
// 空閒任務堆疊
static stacktype_t idletaskstack[configminimal_stack_size];
// 空閒任務控制塊
static statictask_t idletasktcb;
// 定時服務任務堆疊
static stacktype_t timertaskstack[configtimer_task_stack_depth];
// 定時器服務任務控制塊
static statictask_t timertasktcb;
// 獲取空閒任務無地任務堆疊和任務控制塊記憶體, 函式
// ppxidletasktcbbuffer : 任務控制塊記憶體
// ppxidletaskstackbuffer 任務堆疊記憶體
// pulidletaskstacksize 任務堆疊大小
stacktype_t **ppxidletaskstackbuffer,
uint32_t *pulidletaskstacksize)
// 獲取定時器服務任務的任務堆疊和任務控制塊記憶體
// ppxtimertasktcbbuffer: // 任務控制塊記憶體
// ppxtimertaskstackbuffer: // 任務堆疊記憶體
// pultimertaskstacksize: // 任務堆疊大小
stacktype_t **ppxtimertaskstackbuffer,
uint32_t *pultimertaskstacksize)
// 建立任務
starttask_handler=xtaskcreatestatic((taskfunction_t )start_task, // 任務函式
(const char* )"start_task", // 任務名稱
(uint32_t )start_stk_size, // 任務堆疊大小
(void* )null, // 傳遞給任務函式的引數
(ubasetype_t )start_task_prio, // 任務優先順序
(stacktype_t* )starttaskstack, // 任務堆疊
(statictask_t* )&starttasktcb); // 任務控制塊
vtaskstartscheduler(); // 開啟任務排程
(3) 使用xtaskcreaterestricted()函式建立任務
xtaskcreaterestricted 此函式也是用來建立任務的,只不過此函式要求所使用的mcu有mpu(記憶體保護單元),用此函式建立的任務會受到mpu的保護, 其他的功能和xtaskcreate()一樣
2.任務的建立 :
vtaskdelete(starttask_handler); // 刪除任務
FreeRTOS學習(二)任務基礎
2.任務基礎知識 在嵌入式開發中,有兩種常見的開發方式 前後臺系統和嵌入式作業系統。1.1 前後臺系統 前台 就是中斷,可以多級巢狀,處於處理一些實時性要求比較高的事件,比如按鍵的狀態獲取。後台 乙個無限迴圈,在迴圈中呼叫相關函式完成相應操作。這種程式設計方式的主要缺陷在於兩方面 1 複雜度方面 無...
FreeRTOS學習(三)任務管理
2.任務刪除 3.任務掛起與恢復 4.任務相關api freertos 提供了多種任務建立的api,這裡主要列舉了動態建立和靜態建立 函式 api 功能描述 xtaskcreate 動態建立,堆疊由 freertos 動態分配 xtaskcreatestatic 靜態建立,堆疊由使用者指定分配 1....
FreeRTOS學習(五) 任務相關API函式
宣告及感謝 跟隨正點原子資料學習,在此作為學習的記錄和總結 環境 keil stm32f103 api函式預覽 1.ubasetype t uxtaskpriorityget taskhandle t xtask 獲取某個任務的優先順序 引數 xtask 傳入任務控制代碼 unsigned port...