FreeRTOS學習 一 任務的建立和刪除

2021-09-08 03:03:13 字數 2354 閱讀 3085

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

環境 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...