女人被爽到高潮视频免cn费95,久久99精品久久久久久久不卡,内射人妻骚骚骚,久久精品一区二区三区四区啪啪 ,美女视频黄频a美女大全

  • 正文
    • 什么是RTOS任務優(yōu)先級?
    • RTOS兩任務優(yōu)先級相同,誰先執(zhí)行?
  • 相關推薦
申請入駐 產業(yè)圖譜

RTOS兩任務優(yōu)先級相同,誰先執(zhí)行?

2024/11/27
5253
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

微信公眾號 | strongerHuang

RTOS兩任務優(yōu)先級相同,誰先執(zhí)行?這個問題把很多初學的小伙伴難住了,今天就來結合案例給大家簡單描述一下。

什么是RTOS任務優(yōu)先級?

在RTOS中,每一個任務(Task)都會分配一個優(yōu)先級,在所有就緒的任務中,任務優(yōu)先級越高就優(yōu)先執(zhí)行。

任務優(yōu)先級在我們創(chuàng)建任務的時候,就要賦予(設置)一個優(yōu)先級值,比如FreeRTOS創(chuàng)建任務:

/* APP任務優(yōu)先級 */#define?APP_TASK_PRIORITY?????????6
/* 創(chuàng)建應用程序(APP任務) */xTaskCreate(APP_Task, "APP_Task", 128, NULL, APP_TASK_PRIORITY, NULL);

6 代表?APP_Task?任務優(yōu)先級(宏定義為6),在FreeRTOS系統(tǒng)中,這個數(shù)字越大,優(yōu)先級越高。

然而,并不是每一款RTOS任務優(yōu)先級數(shù)值越大優(yōu)先級越大,有些RTOS則相反。

比如:UCOS中,優(yōu)先級數(shù)值越小,優(yōu)先級則越大。

RTOS兩任務優(yōu)先級相同,誰先執(zhí)行?

在FreeRTOS系統(tǒng)中,如果兩個任務優(yōu)先級(數(shù)值)相同,誰先執(zhí)行?

這里結合代碼,和實驗現(xiàn)象給大家描述一下。

1、創(chuàng)建兩個相同優(yōu)先級的任務

比如:APP_Task1和APP_Task2,優(yōu)先級都為6

#define APP_TASK1_PRIORITY        6                        //APP任務1優(yōu)先級#define APP_TASK2_PRIORITY        6                        //APP任務1優(yōu)先級
xTaskCreate(APP_Task1, "APP_Task1", 128, NULL, APP_TASK1_PRIORITY, NULL);xTaskCreate(APP_Task2, "APP_Task2", 128, NULL, APP_TASK2_PRIORITY, NULL);

2、兩個應用程序

比如:都是累加一個值,并隔一段時間打印累加值。

static uint32_t Task1_Cnt = 0;static uint32_t Task2_Cnt = 0;
static void APP_Task1(void *pvParameters){  vTaskDelay(100);
  while(1)  {    Task1_Cnt++;
    if(0 == (Task1_Cnt%1000000))    {      printf("Task1_Cnt=%d",Task1_Cnt);    }  }}
//作者:strongerHuang
static void APP_Task2(void *pvParameters){  vTaskDelay(200);
  while(1)  {    Task2_Cnt++;
    if(0 == (Task2_Cnt%1000000))    {      printf("Task2_Cnt=%d",Task2_Cnt);    }  }}

3、實驗現(xiàn)象

輪流打印數(shù)值,如下圖:

通過實驗現(xiàn)象,你肯定猜得出結論:FreeRTOS兩個優(yōu)先級相同的任務,它們是按照時間片輪轉的方式進行調度,也就是交替執(zhí)行

當然,這里有一個前提:任務要處于就緒狀態(tài)。如果任務是阻塞狀態(tài),則改任務不會被輪轉執(zhí)行。

比如:在任務1中增加系統(tǒng)延時(阻塞),則任務1不會被執(zhí)行,看實驗現(xiàn)象,如下圖:

補充說明

上面只是針對FreeRTOS實時操作系統(tǒng)而言,并不是所有RTOS都是這樣的。

像UCOS就不一樣,創(chuàng)建兩個相同優(yōu)先級的任務,只有第一個(先創(chuàng)建的任務)優(yōu)先被執(zhí)行,第二個不會被執(zhí)行。

還是一樣,給大家看類似的源碼和實驗現(xiàn)象。

1、創(chuàng)建兩個相同優(yōu)先級的任務

同樣:APP_Task1和APP_Task2,優(yōu)先級都為6

#define TASK1_PRIO                             6#define TASK2_PRIO                             6
/* 創(chuàng)建任務1 */OSTaskCreateExt((void (*)(void *)) APP_Task1,                (void           *) 0,                (OS_STK         *)&Task1_Stk[TASK1_STK_SIZE-1],                (INT8U           ) TASK1_PRIO,                (INT16U          ) TASK1_PRIO,                (OS_STK         *)&Task1_Stk[0],                (INT32U          ) TASK1_STK_SIZE,                (void           *) 0,                (INT16U          )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
/* 創(chuàng)建任務2 */OSTaskCreateExt((void (*)(void *)) APP_Task2,                (void           *) 0,                (OS_STK         *)&Task2_Stk[TASK2_STK_SIZE-1],                (INT8U           ) TASK2_PRIO,                (INT16U          ) TASK2_PRIO,                (OS_STK         *)&Task2_Stk[0],                (INT32U          ) TASK2_STK_SIZE,                (void           *) 0,                (INT16U          )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));

2、兩個應用程序

同樣:也是累加一個值,并隔一段時間打印累加值。

static uint32_t Task1_Cnt = 0;static uint32_t Task2_Cnt = 0;
void APP_Task1(void *pvParameters){  OSTimeDly(100);
  while(1)  {    Task1_Cnt++;
    if(0 == (Task1_Cnt%1000000))    {      printf("Task1_Cnt=%d",Task1_Cnt);    }  }}
//作者:strongerHuang
void APP_Task2(void *pvParameters){  OSTimeDly(200);
  while(1)  {    Task2_Cnt++;
    if(0 == (Task2_Cnt%1000000))    {      printf("Task2_Cnt=%d",Task2_Cnt);    }  }}

3、實驗現(xiàn)象

只有先被創(chuàng)建的任務1有打印數(shù)值,如下圖:

那么,為什么會出現(xiàn)這樣的情況呢?

答案是:UCOS不允許相同優(yōu)先級的任務。

如果某一優(yōu)先級(如6)的任務已經被創(chuàng)建,再次創(chuàng)建該優(yōu)先級(6)的任務會創(chuàng)建失敗。這里可以找到內核源碼:

所以,并不是所有RTOS都可以創(chuàng)建兩個相同優(yōu)先級的任務,具體要看RTOS自身的情況。

最后,你明白了嗎?

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護公眾號『strongerHuang』,分享嵌入式軟硬件、單片機、物聯(lián)網等內容。