日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uCOS-II任务的挂起和恢复

發布時間:2024/9/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uCOS-II任务的挂起和恢复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數描述

OSTaskSuspend()
功能描述:無條件掛起一個任務。調用此函數的任務也可以傳遞參數OS_PRIO_SELF,掛起調用任務本身。
函數原型:INT8U OSTaskSuspend ( INT8U prio);
參數說明:prio為指定要獲取掛起的任務優先級,也可以指定參數OS_PRIO_SELF,掛起任務本身。此時,下一個優先級最高的就緒任務將運行。
返回值:
OSTaskSuspend()的返回值為下述之一:
? OS_NO_ERR:函數調用成功。
? OS_TASK_ SUSPEND_IDLE:試圖掛起μC/OS-II中的空閑任務(Idle task)。此為非法操作。
? OS_PRIO_INVALID:參數指定的優先級大于OS_LOWEST_PRIO或沒有設定OS_PRIO_SELF的值。
? OS_TASK_ SUSPEND _PRIO:要掛起的任務不存在。


OSTaskResume()
功能描述:喚醒一個用OSTaskSuspend()函數掛起的任務。OSTaskResume()也是唯一能“解掛”掛起任務的函數。
函數原型:NT8U OSTaskResume ( INT8U prio)
參數說明:prio指定要喚醒任務的優先級?
返回值:
OSTaskResume ()的返回值為下述之一:
? OS_NO_ERR:函數調用成功。
? OS_TASK_RESUME_PRIO:要喚醒的任務不存在。
? OS_TASK_NOT_SUSPENDED:要喚醒的任務不在掛起狀態。
? OS_PRIO_INVALID:參數指定的優先級大于或等于OS_LOWEST_PRIO。

使用注意

  當前任務掛起后,只有其他任務才能喚醒被掛起的任務。任務掛起后,系統會重新進行任務調度,運行下一個優先級最高的就緒任務。喚醒掛起任務需要調用函數OSTaskResume()。?任務的掛起是可以疊加到其他操作上的。例如,任務被掛起時正在進行延時操作,那么任務的喚醒就需要兩個條件:延時的結束以及其他任務的喚醒操作。又如,任務被掛起時正在等待信號量,當任務從信號量的等待對列中清除后也不能立即運行,而必須等到被喚醒后。?

?

一個測試范例

測試平臺:STM32

測試代碼:

#define StartTaskPrio 4 #define TASK1_PRIO 5 #define TASK2_PRIO 6 int main(void) {USART1_Config(); OSInit();OSTaskCreate(StartTask, (void *)0, &StartTaskStk[StartTaskStkLength-1], StartTaskPrio); OSStart();return 0; }void StartTask(void *p_arg) {(void)p_arg;
USART1_printf("\nStartTask has been running !");SysTick_Config(SystemCoreClock
/ OS_TICKS_PER_SEC);OSTaskCreate(Task1, (void *)0, &task1_stk[TASK1_STK_SIZE-1], TASK1_PRIO); OSTaskCreate(Task2, (void *)0, &task2_stk[TASK2_STK_SIZE-1], TASK2_PRIO); OSTaskSuspend(StartTaskPrio); }void Task1(void *p_arg) {(void)p_arg; while(1){ USART1_printf("\nTask1 has been running !");OSTaskSuspend(TASK1_PRIO);} }void Task2(void *p_arg) {(void)p_arg; while(1){USART1_printf("\n\nTask2 start running !");OSTaskResume(TASK1_PRIO);
     USART1_printf("\nTask2 has been running !"); OSTimeDly(
2*OS_TICKS_PER_SEC); } }

程序執行時序流程:

運行結果:

?

參考資料:《杭電UCOS-II-ARM7實驗指導書》

?

轉載于:https://www.cnblogs.com/amanlikethis/p/4150452.html

總結

以上是生活随笔為你收集整理的uCOS-II任务的挂起和恢复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。