004 FreeRTOS建立與刪除任務

2021-10-01 16:47:49 字數 2447 閱讀 3643

(一)建立與刪除任務函式

(二)上面的四個函式目前只用動態建立任務和刪除任務

(三)動態建立任務 函式 xtaxkcreate()

巨集configsupport_dynamic_allocation必須為 1

新建立的任務預設就是就緒態的,如果當前沒有比它更高優先順序的任務執行那麼此任務就會立即進入執行態開始執行,不管在任務排程器啟動前還是啟動後,都可以建立任務

函式原型

basetype_t xtaskcreate

( taskfunction_t pxtaskcode,

const

char

*const pcname,

const uint16_t usstackdepth,

void

*const pvparameters,

ubasetype_t uxpriority,

taskhandle_t *

const pxcreatedtask )

引數:

pxtaskcode: 任務函式。

pcname: 任務名字,一般用於追蹤和除錯,任務名字長度不能超過。configmax_task_name_len。

usstackdepth: 任務堆疊大小,注意實際申請到的堆疊是usstackdepth的 4 倍。其中空閒任務的任務堆疊大小為 configminimal_stack_size。

pvparameters: 傳遞給任務函式的引數。

uxpriotiry: 任務優先順序,範圍 0~ configmax_priorities-1。

pxcreatedtask: 任務控制代碼,任務建立成功以後會返回此任務的任務控制代碼,這個控制代碼其實就是任務的任務堆疊。此引數就用來儲存這個任務控制代碼。其他 api 函式可能會使用到這個控制代碼。

返回值:

pdpass: 任務建立成功。

errcould_not_allocate_required_memory: 任務建立失敗,因為堆記憶體不足!

(四)刪除任務數 函式 vtaskdelete()

刪除乙個用函式 xtaskcreate()或者 xtaskcreatestatic()建立的任務,被刪除了的任務不再存

在,也就是說再也不會進入執行態。任務被刪除以後就不能再使用此任務的控制代碼!如果此任務

是使用動態方法建立的,也就是使用函式 xtaskcreate()建立的,那麼在此任務被刪除以後此任

務之前申請的堆疊和控制塊記憶體會在空閒任務中被釋放掉,因此當呼叫函式 vtaskdelete()刪除

任務以後必須給空閒任務一定的執行時間。

只有那些由核心分配給任務的記憶體才會在任務被刪除以後自動的釋放掉,使用者分配給任務

的記憶體需要使用者自行釋放掉,比如某個任務中使用者呼叫函式 pvportmalloc()分配了 500 位元組的內

存,那麼在此任務被刪除以後使用者也必須呼叫函式 vportfree()將這 500 位元組的記憶體釋放掉,否

則會導致記憶體洩露。此函式原型如下:

vtaskdelete

( taskhandle_t xtasktodelete )

(五)任務建立和刪除實驗(動態方法)

● 任務設定

#define start_task_prio  1            

//任務優先順序 (1)

#define start_stk_size 128           

//任務堆疊大小 (2)

taskhandle_t starttask_handler;

//任務控制代碼 (3)

void

start_task

(void

*pvparameters)

;//任務函式 (4)

● main()函式

int

main

(void

)

● 開始任務函式,用來建立其他的任務

//開始任務任務函式

FreeRtos 1 任務建立與管理

freertos實時作業系統移植 以上是歷史freertos部落格。freertos系列我會堅持更下去。任務的建立函式 basetype t xtaskcreate taskfunction t pxtaskcode,const char const pcname,const configstack...

Oracle索引 index 的分類 建立與刪除

1.索引分類 a 唯一索引,作用是資料約束,保證資料唯一,還有就是資料索引,提高查詢效率 b 一般索引,只有資料索引的作用,2.唯一索引的建立 create unique index 索引名 on 表名 欄位名 ok,假設有乙個emploeyy表,裡面有乙個empname欄位,我們來為empname...

oracle 同義詞 synonym 建立與刪除表

建立同義表tableb create synonym tablenameb for 資料庫名字.tablenamea 刪除同義表tableb drop synonym tablenameb 最近工作遇到這樣乙個問題,我們本來的資料庫在a裡面,但是新開的專案想在資料庫a下面的乙個子使用者b裡面。a裡面...