上篇文章有說過,TI-RTOS有四種的執行續,
優先級由高到低分別是硬體中斷(Hwi)、軟體中斷(Swi)、任務(Task)和空閒任務(Idle Task),
現在來看一下要任務要怎麼使用。
建立多個任務(Task)讓晶片看起來能同時處理多件事情,
事實上處理器一次還是只能處理一個任務,
而其他任務則是處於其他狀態,
以下是任務可能的狀態,
下面程式碼介紹如何建立一個任務,
...
/* TI-RTOS 任務的標頭檔 */
#include <ti/sysbios/knl/Task.h>
/* 每個任務都用獨立的Stack,
* 所以要先準備一個記憶體空間來讓任務使用。
* */
uint8_t sbcTaskStack[TASK_STACK_SIZE];
/* Task object (to be constructed) */
Task_Struct task0;
int main() {
// Configure task
Task_Params taskParams;
// TI-RTOS 用來初始化 Task_Params 的API ,這邊會給部分變數預設值
Task_Params_init(&taskParams);
// 有些變數沒有預設值,必須要自行設定
taskParams.stack = sbcTaskStack; // 規劃給任務使用的Stack位址
taskParams.stackSize = TASK_STACK_SIZE;
taskParams.priority = TASK_PRIORITY; // 任務的優先級,數字越大代表該任務越重要
// TI-RTOS 建立任務的API
// 第一個參數是該任務的物件,用來建立、解除任務
// 第二個參數是該任務的主程式,通常裡面會有一個無窮迴圈
// 第三個參數是該任務的設定參數
// 第四個參數是該任務的Error_Block
Task_construct(&task0, taskFunction, &taskParams, NULL);
// 這邊簡單理解就是系統正式跑起來了,要走到這邊,剛剛建立的任務才會被執行起來
BIOS_start();}
}
/* 任務的主程式 */
void taskFunction(UArg arg0, UArg arg1)
{
/* Local variables. Variables here go onto task stack!! */
/* Run one-time code when task starts */
while (1) /* Run loop forever (unless terminated) */
{
/*
* 在這邊等待一段時間或是等待一個訊號
* Examples:
* ``Sempahore_pend()``
* ``Event_pend()``
* ``Task_sleep()``
*
* 按照訊號或其他需求執行相關的工作
*/
}
}
Task_construct(&task0, taskFunction, &taskParams, NULL);
taskFunction 內不知明原因 跑飛了
能用何API free掉,,再重新 Task_construct(&task0, taskFunction, &taskParams, NULL);
一次嗎?