精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

freeRTOS的任務

汽車電子技術 ? 來源:嵌入式之入坑筆記 ? 作者:嵌入式之入坑筆記 ? 2023-02-10 11:02 ? 次閱讀

1、freeRTOS的任務

(1)任務的狀態

任務在運行過程中,可能有以下幾種狀態:

1)運行態。任務當前正在運行中,占有cpu的使用權。

    2)就緒態。滿足了運行條件,但是當前沒有運行,可能是有高優先級任務在執行或者在中斷,處于等待獲得cpu使用權然后運行的狀態中。

    3)阻塞態。在某些條件下被阻塞了,不能得到運行。比如等待某些信號量,消息隊列或者調用了延遲函數。

    4)掛起態。任務被通過調用掛起操作被終止執行了,直到被從掛起狀態中恢復為止,否則將一直處于掛起的狀態中。

(2)任務的優先級

freeRTOS的任務優先級是數值越大,任務的優先級越高。

freeRTOS 中任務的最高優先級是通過 **FreeRTOSConfig.h **文件中的

configMAX_PRIORITIES

進行配置的,用戶實際可以使用的優先級范圍是:

0 到 configMAX_PRIORITIES – 1

2、freeRTOS的任務切換的實現

(1)PendSV中斷

freeRTOS系統的任務切換的具體過程最終都是在pendSV中斷服務函數里面完成的。

** PendSV是一種不精確的異常處理,優先級和掛起狀態可以通過編程實現,一般在實時操作系統中PendSV**的優先級都會被設置為最低,在其他所有的異常中斷處理完以后才執行,對上下文的切換非常有用,在OS設計中也是屬于非常關鍵的。

在freeRTOS系統中,執行上下文切換依靠的是任務調度器。上下文切換被觸發的場合可以有:

1> 執行一個系統調用。如:任務切換函數taskYIELD()、延時vTaskDelay()。

2> Systick中斷。

(2)Systick中斷

** Systick**中斷服務函數中會進行任務切換。

3、freeRTOS的任務管理的API函數

圖片

3.1、FreeRTOS任務創建

freeRTOS中,可以根據實際使用的需要創建一定數量的任務(線程),任務只有被成功創建了,才有可能被執行到。

    在FreeRTOS實時操作系統中,創建任務可以使用如下的API
portBASE_TYPE xTaskCreate(
         pdTASK_CODE pvTaskCode,
         const char * const pcName,
         unsigned short usStackDepth,
         void *pvParameters,
         unsigned portBASE_TYPE uxPriority,
         xTaskHandle *pvCreatedTask
        );

函數參數說明:
    pvTaskCode:指向任務入口函數的指針。即任務函數。
    pcName:任務的描述。一般都是為了調試方便而使用的。由 tskMAX_TASK_NAME_LEN 定義的最大長度,默認為 16。
    usStackDepth:任務堆棧的大小。不是字節數而是以字為單位。例如,如果堆棧為 16 位寬,并且 usStackDepth 定義為 100,則將分配 200 個字節用于堆棧存儲。
    pvParameters:任務的參數的指針。可以向創建的任務中傳入參數,不需要傳送參數可以選NULL。
    uxPriority:任務運行的優先級。
    pvCreatedTask:任務的句柄,通過該句柄引用創建的任務。
返回值:
    任務創建成功返回 pdPASS;創建失敗返回 pdFAIL。

創建一個任務的示例如下:

xTaskCreate((TaskFunction_t )Start_Task,            //任務函數
            (const char*    )"Start_Task",          //任務名稱
            (uint16_t       )128,                   //任務堆棧大小
            (void *         )NULL,                  //傳遞給任務函數的參數
            (UBaseType_t    )5,                     //任務優先級
            (TaskHandle_t * )&StartTask_Handler);   //任務句柄

注意:

任務的優先級要根據 **FreeRTOSConfig.h **文件中的

configMAX_PRIORITIES
進行設置的,可以使用的優先級范圍是 0 到 configMAX_PRIORITIES – 1,如果創建的任務所選的任務優先級超過了這個設置的范圍,會被忽略掉,不會被執行。

3.2、FreeRTOS任務掛起

當任務在系統運行過程中,因為某些條件或者有其他的更加重要的事情要做的時候,可以考慮把某些任務先掛起,等候條件到達之后再恢復任務繼續調度運行。

掛起任務的函數為:

void vTaskSuspend( xTaskHandle pxTaskToSuspend )
參數:
    pxTaskToSuspend:需要被掛起的任務的優先級
返回值:無
要使用這個函數,需要在 FreeRTOSConfig.h中將宏定義 INCLUDE_vTaskSuspend 定義為 1,如下:

圖片

此外,如果要掛起、恢復整個系統所有的任務,freeRTOS也提供了一個API函數,如下:
void vTaskSuspendAll( void )    // 掛起所有的任務
BaseType_t xTaskResumeAll( void )  // 恢復所有被掛起的任務
要恢復某個被掛起的任務,可以使用函數:
void vTaskResume( xTaskHandle pxTaskToResume )
參數:
    pxTaskToResume:任務的優先級

3.3、FreeRTOS任務刪除

如果有某些任務只是需要存在于某些條件,當條件滿足之后就不再需要這個任務參與運行,這個時候可以選擇刪除掉這個任務,釋放該任務所占用的堆棧空間。

    刪除任務可以使用函數:
void vTaskDelete( xTaskHandle pxTask )
參數:
pxTask:需要被刪除的任務句柄
返回值:無

注意:要使用這個函數,需要將宏定義 INCLUDE_vTaskDelete 設置為 1 。

4、freeRTOS的內核管理函數

圖片

4.1、獲取任務的優先級

如果運行過程中需要知道當前運行的任務的優先級,可以調用優先級獲取函數得到任務的優先級:
unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask )
 參數:
     pxTask:需要獲取優先級的任務的句柄。
 返回值:
     句柄對應的任務的優先級。

4.2、修改任務的優先級

任務在運行過程中,優先級希望能被改變成其他的優先級,可以使用函數:

void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority )
參數:
      pxTask:任務的句柄。
       uxNewPriority:需要修改的新的優先級的值。

5、freeRTOS的延時函數

5.1、相對延時函數

void vTaskDelay(const TickType_t TicksToDelay)

5.2、絕對延時函數

void vTaskDelayUntil(
                        TickType_t* const pxPreviousWakeTime,
                        const TickType_t  xTimeIncrement
                    )
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62429
  • FreeRTOS
    +關注

    關注

    12

    文章

    483

    瀏覽量

    62001
  • 中斷服務
    +關注

    關注

    0

    文章

    9

    瀏覽量

    6828
收藏 人收藏

    評論

    相關推薦

    轉:第10章 FreeRTOS任務管理

    第10章FreeRTOS任務管理 對于初學者,特別是對于沒有RTOS基礎的同學來說,了解FreeRTOS任務管理非常重要,了解任務管理的目
    發表于 08-23 09:54

    STM32CUBE的freertos任務創建

    目錄問題說明解決步驟驗證方案總結問題說明STM32CUBE的freertos任務創建十分簡單方便,但卻有一個麻煩:需要我們把要跑的任務具體代碼都寫進freertos.c的文件里面,對
    發表于 08-24 08:26

    有什么方法可以查看FreeRTOS任務的運行狀態呢

    有什么方法可以查看FreeRTOS任務的運行狀態呢?怎樣去查看FreeRTOS任務的運行狀態呢?
    發表于 11-02 07:59

    淺析FreeRTOS任務系統

    FreeRTOS-任務基礎大多數時候,使用RTOS就是使用其多任務處理功能。所謂多任務處理,其實并不是我們移植了RTOS系統后,CPU就可以同時處理多個
    發表于 01-06 08:08

    FreeRTOS任務通知相關資料分享

    FreeRTOS--任務通知Notification今天發現了一個奇怪的現象,特意把它記錄下來,防止忘記了。先上圖于是找了所有的任務句柄,真的是沒有操作掛起了這個任務。但是程序還是運行
    發表于 01-21 12:07

    FreeRTOS任務的使用

    FreeRTOS學習筆記(二):任務創建/刪除,掛起/解掛上篇文章介紹了任務相關的基礎知識,本篇文章對FreeRTOS任務的使用,將會介紹
    發表于 02-18 07:14

    詳細講解freeRTOS任務

    詳細講解freeRTOS任務
    發表于 02-18 06:57

    FreeRTOS任務創建到閃存LED的基本應用程序

    應用程序 : 本代碼是 FreeRTOS 任務的基本應用程序, 用于創建閃存 LED 任務 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件
    發表于 08-22 06:28

    如何輕松幾步實現在STM32上運行FreeRTOS任務

    輕松幾步實現在STM32上運行FreeRTOS任務
    的頭像 發表于 03-01 12:07 ?8425次閱讀
    如何輕松幾步實現在STM32上運行<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>

    FreeRTOS任務控制API函數介紹

    FreeRTOS任務控制API函數主要實現任務延時、任務掛起、解除任務掛起、任務優先級獲取和設置
    的頭像 發表于 03-19 10:19 ?2254次閱讀

    (一)FreeRTOS學習之FreeRTOS任務基礎知識

    FreeRTOS學習之FreeRTOS任務基礎知識轉行小白一枚,通過博客記錄自我學習,望更多博友多多指點,感激不盡!RTOS系統的核心就是任務管理,學習RTOS系統主要是為了使用RTO
    發表于 12-23 19:57 ?3次下載
    (一)<b class='flag-5'>FreeRTOS</b>學習之<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>基礎知識

    FreeRTOS任務詳解

    詳細講解freeRTOS任務
    發表于 12-23 20:01 ?11次下載
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>任務</b>詳解

    FreeRTOS高級篇4---FreeRTOS任務切換分析

    FreeRTOS任務相關的代碼大約占總代碼的一半左右,這些代碼都在為一件事情而努力,即找到優先級最高的就緒任務,并使之獲得CPU運行權。任...
    發表于 01-26 17:41 ?12次下載
    <b class='flag-5'>FreeRTOS</b>高級篇4---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>切換分析

    FreeRTOS高級篇2---FreeRTOS任務創建分析

    FreeRTOS基礎系列《FreeRTOS系列第10篇---FreeRTOS任務創建和刪除》中介紹了任務創建API函數xTaskCreat
    發表于 01-26 17:42 ?23次下載
    <b class='flag-5'>FreeRTOS</b>高級篇2---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>創建分析

    FreeRTOS系列第11篇---FreeRTOS任務控制

    FreeRTOS任務控制API函數主要實現任務延時、任務掛起、解除任務掛起、任務優先級獲取和設置
    發表于 01-26 17:54 ?12次下載
    <b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b>控制