OSTimeDlyResume()--恢復一個延遲任務(取消任務延時)
恢復一個延遲任務
描述:這個函式通過呼叫OSTimeDly() 或者
OSTimeDlyHMSM()去恢復一個延時的任務,它不能喚醒
等待超時的任務。這個情況任務將把它看成等待超時,除非你指定這種效果,
同時,不能恢復呼叫OSTimeDlyHMSM() 延時超過65535個時鐘節拍的任務,就是說,如果
時鐘節拍是100Hz,你將不能夠任務OSTimeDlyHMSM(0, 10, 55, 350) 或者更大延遲數
引數:prio:要恢復任務的優先順序
返回 : OS_NO_ERR 成功恢復
* OS_PRIO_INVALID 優先順序值大於最大值
* (i.e. >= OS_LOWEST_PRIO)
* OS_TIME_NOT_DLY 任務沒有等待時間期滿
* OS_TASK_NOT_EXIST 要恢復的任務沒有建立
μC/OS-Ⅱ允許使用者結束正處於延時期的任務,延時的任務可以不等待延時期滿,而是通過取消其它任務的延時來使自己處於就緒態,可以通過呼叫OSTimeDlyResume()和指定要恢復的任務的優先順序來完成。
OSTimeDlyResume()的具體資訊見下表:
為了說明OSTimeDlyResume()函式的使用方法,我們設計一個系統,假設TaskLED的任務優先順序為2。讓一個LED以0.5Hz的頻率閃耀,但每按鍵一次,LED狀態翻轉一次。下面是兩個任務的處理流程。
TaskLED任務程式碼如下。
void TaskLED (void *pdata)
{
……//初始化程式碼
while (1) //循壞控制LED以固定頻率閃爍
{
IO0CLR = LED1;//點亮LED
OSTimeDly(OS_TICKS_PER_SEC);//1s延時
IO0SET = LED1;//熄滅LED
OSTimeDly (OS_TICKS_PER_SEC);//1s延時
}
}
TaskKEY任務的程式碼如下。
void TaskKEY (void *pdata)
{
……初始化程式碼
while (1)
{
while ((IO0PIN & KEY1) != 0)//等待按健按下
{
OSTimeDly(1);//延時1個節拍用於任務切換
}
OSTimeDlyResume(2);//TaskLED優先順序為2,恢復TaskLED
while ((IO0PIN & KEY1) == 0)
{
OSTimeDly(1);//延時1個節拍,用於任務切換
}
}
}