函數名 :xTaskCreate 頭文件 :task.h 函數功能:任務創(chuàng)建 函數聲明:
portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pvCreatedTask
);
如果使用FreeRTOS-MPU,建議使用 xTaskCreateRestricted()來替換xTaskCreate()。 在FreeRTOS-MPU 下使用xTaskCreate(),允許任務被創(chuàng)建于運行在特權模式或者用戶模式。(見uxPriority 的描述)。特權模式下,可以利用任務訪問整個存儲器空間,用戶模式下,任務只能訪問自己的堆棧。在兩種情況下,MPU 不會自動捕獲堆棧溢出,雖然標準的FRTOS堆棧溢出檢測方案依然可以使用。xTaskCreateRestricted() 允許了更大的靈活性。 【具體參數】 pvTaskCode :指向任務函數。任務必須以永不返回的形式實現(比如一個死循環(huán))。筆者注釋:這個參數即任務函數的函數名,見下文描述。 pcName : 任務函數的別名,僅僅是方便調試所用。最大的長度由configMAX_TASK_NAME_LEN定義。 usStackDepth :任務堆棧的深度,定義了堆??梢园淖兞繑怠皇亲止?jié)數。比如如果堆棧的寬度為16BIT,而 usStackDepth定義為100,則200 字節(jié)被分配給堆棧存儲。堆棧深度乘以堆棧寬度的最大值,不能超過 size_t變量能包含的最大值。(筆者注釋:堆棧到底應該定義多大,大體要考慮到:
pvParameters :作為參數的指針,當任務創(chuàng)建時。 uxPriority :任務的優(yōu)先級。包括MPU支持的系統(tǒng)可以選擇在特權模式(系統(tǒng)模式)創(chuàng)建任務,通過設置優(yōu)先級參數的portPRIVILEGE_BIT位。比如,創(chuàng)建一個特權任務在優(yōu)先級2,則uxPriority 應當設置為( 2 | portPRIVILEGE_BIT )。 pvCreatedTask :回傳一個句柄,以便創(chuàng)建的任務可以被關聯。返回值:pdPASS,如果任務成功創(chuàng)建且添加到就緒列表,否則返回一個錯誤代碼,見 projdefs.h。 范例:
void vTaskCode( void * pvParameters )//創(chuàng)建的任務
{
//如果有初使化,放在死循環(huán)之前
for( ;; ) //一個死循環(huán)
{
//任務代碼
}
}
//此函數創(chuàng)建一個任務
void vOtherFunction( void )
{
static unsigned char ucParameterToPass;
xTaskHandle xHandle;
/*
創(chuàng)建任務,存儲句柄,注意傳遞的參數 ucParameterToPass必須在任務生存周期內存在,
故在此例子的情況下定義為局部靜態(tài)變量。如果它只是一個自動堆棧變量(局部變量),它可能不再存在或者至少崩潰了,當新的任務試圖訪問時。
筆者注釋:由于該任務一建立就在同一個函數中被刪除了,大可以用些局部靜態(tài)變量和局部變量,如果不是在一個函數中刪除之前創(chuàng)建的任務,以上參數請用全局變量。
*/
xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass,
tskIDLE_PRIORITY, &xHandle );
//使用句柄刪除任務。
vTaskDelete( xHandle );
}
更多建議: