chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

FreeRTOS任務控制API函數(shù)介紹

安芯教育科技 ? 來源:極術社區(qū) ? 作者:朱工 ? 2021-03-19 10:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

FreeRTOS任務控制API函數(shù)主要實現(xiàn)任務延時、任務掛起、解除任務掛起、任務優(yōu)先級獲取和設置等功能。

1. 相對延時

1.1 函數(shù)描述

void vTaskDelay( portTickTypexTicksToDelay ) 調(diào)用vTaskDelay()函數(shù)后,任務會進入阻塞狀態(tài),持續(xù)時間由vTaskDelay()函數(shù)的參數(shù)xTicksToDelay指定,單位是系統(tǒng)節(jié)拍時鐘周期。常量portTICK_RATE_MS 用來輔助計算真實時間,此值是系統(tǒng)節(jié)拍時鐘中斷的周期,單位是毫秒。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskDelay 必須設置成1,此函數(shù)才能有效。

vTaskDelay()指定的延時時間是從調(diào)用vTaskDelay()后開始計算的相對時間。比如vTaskDelay(100),那么從調(diào)用vTaskDelay()后,任務進入阻塞狀態(tài),經(jīng)過100個系統(tǒng)時鐘節(jié)拍周期,任務解除阻塞。因此,vTaskDelay()并不適用與周期性執(zhí)行任務的場合。此外,其它任務和中斷活動,會影響到vTaskDelay()的調(diào)用(比如調(diào)用前高優(yōu)先級任務搶占了當前任務),因此會影響任務下一次執(zhí)行的時間。API函數(shù)vTaskDelayUntil()可用于固定頻率的延時,它用來延時一個絕對時間。

1.2 參數(shù)描述

xTicksToDelay:延時時間總數(shù),單位是系統(tǒng)時鐘節(jié)拍周期。

1.3 用法舉例

voidvTaskFunction( void * pvParameters ) { /* 阻塞500ms. */ constportTickType xDelay = 500 / portTICK_RATE_MS; for( ;; ) { /* 每隔500ms觸發(fā)一次LED, 觸發(fā)后進入阻塞狀態(tài) */ vToggleLED(); vTaskDelay( xDelay ); }}

2. 絕對延時

2.1 函數(shù)描述

void vTaskDelayUntil( TickType_t *pxPreviousWakeTime,const TickType_txTimeIncrement ); 任務延時一個指定的時間。周期性任務可以使用此函數(shù),以確保一個恒定的頻率執(zhí)行。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskDelayUntil 必須設置成1,此函數(shù)才有效。

這個函數(shù)不同于vTaskDelay()函數(shù)的一個重要之處在于:vTaskDelay()指定的延時時間是從調(diào)用vTaskDelay()之后(執(zhí)行完該函數(shù))開始算起的,但是vTaskDelayUntil()指定的延時時間是一個絕對時間。 調(diào)用vTaskDelay()函數(shù)后,任務會進入阻塞狀態(tài),持續(xù)時間由vTaskDelay()函數(shù)的參數(shù)指定,單位是系統(tǒng)節(jié)拍時鐘周期。因此vTaskDelay()并不適用于周期性執(zhí)行任務的場合。因為調(diào)用vTaskDelay()到任務解除阻塞的時間不總是固定的并且該任務下一次調(diào)用vTaskDelay()函數(shù)的時間也不總是固定的(兩次執(zhí)行同一任務的時間間隔本身就不固定,中斷或高優(yōu)先級任務搶占也可能會改變每一次執(zhí)行時間)。

vTaskDelay()指定一個從調(diào)用vTaskDelay()函數(shù)后開始計時,到任務解除阻塞為止的相對時間,而vTaskDelayUntil()指定一個絕對時間,每當時間到達,則解除任務阻塞。 應當指出的是,如果指定的喚醒時間已經(jīng)達到,vTaskDelayUntil()立刻返回(不會有阻塞)。因此,使用vTaskDelayUntil()周期性執(zhí)行的任務,無論任何原因(比如,任務臨時進入掛起狀態(tài))停止了周期性執(zhí)行,使得任務少運行了一個或多個執(zhí)行周期,那么需要重新計算所需要的喚醒時間。這可以通過傳遞給函數(shù)的指針參數(shù)pxPreviousWake指向的值與當前系統(tǒng)時鐘計數(shù)值比較來檢測,在大多數(shù)情況下,這并不是必須的。 常量portTICK_RATE_MS 用來輔助計算真實時間,此值是系統(tǒng)節(jié)拍時鐘中斷的周期,單位是毫秒。 當調(diào)用vTaskSuspendAll()函數(shù)掛起RTOS調(diào)度器時,不可以使用此函數(shù)。

2.2 參數(shù)描述

pxPreviousWakeTime:指針,指向一個變量,該變量保存任務最后一次解除阻塞的時間。第一次使用前,該變量必須初始化為當前時間。之后這個變量會在vTaskDelayUntil()函數(shù)內(nèi)自動更新。 xTimeIncrement:周期循環(huán)時間。當時間等于(*pxPreviousWakeTime + xTimeIncrement)時,任務解除阻塞。如果不改變參數(shù)xTimeIncrement的值,調(diào)用該函數(shù)的任務會按照固定頻率執(zhí)行。

2.3 用法舉例

每10次系統(tǒng)節(jié)拍執(zhí)行一次

void vTaskFunction( void * pvParameters ) { static portTickType xLastWakeTime; const portTickType xFrequency = 10; // 使用當前時間初始化變量xLastWakeTime xLastWakeTime = xTaskGetTickCount(); for( ;; ) { //等待下一個周期 vTaskDelayUntil( &xLastWakeTime,xFrequency ); // 需要周期性執(zhí)行代碼放在這里 } }

3. 獲取任務優(yōu)先級

3.1 函數(shù)描述

UBaseType_t uxTaskPriorityGet(TaskHandle_t xTask ); 獲取指定任務的優(yōu)先級。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskPriorityGet必須設置成1,此函數(shù)才有效。

3.2 參數(shù)描述

xTask:任務句柄。NULL表示獲取當前任務的優(yōu)先級。

3.3 返回值

返回指定任務的優(yōu)先級。

3.4 用法舉例

voidvAFunction( void ) { xTaskHandlexHandle; // 創(chuàng)建任務,保存任務句柄 xTaskCreate( vTaskCode, “NAME”,STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle ); // 。。.

// 使用句柄獲取創(chuàng)建的任務的優(yōu)先級 if( uxTaskPriorityGet( xHandle ) !=tskIDLE_PRIORITY ) { // 任務可以改變自己的優(yōu)先級 } // // 當前任務優(yōu)先級比創(chuàng)建的任務優(yōu)先級高? if( uxTaskPriorityGet( xHandle ) 《uxTaskPriorityGet( NULL ) ) { // 當前優(yōu)先級較高 } }

4. 設置任務優(yōu)先級

4.1 函數(shù)描述

void vTaskPrioritySet( TaskHandle_txTask,UBaseType_tuxNewPriority ); 設置指定任務的優(yōu)先級。如果設置的優(yōu)先級高于當前運行的任務,在函數(shù)返回前會進行一次上下文切換。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskPrioritySet 必須設置成1,此函數(shù)才有效。

4.2 參數(shù)描述

xTask:要設置優(yōu)先級任務的句柄,為NULL表示設置當前運行的任務。 uxNewPriority:要設置的新優(yōu)先級。

4.3 用法舉例

voidvAFunction( void ) { xTaskHandlexHandle; // 創(chuàng)建任務,保存任務句柄。 xTaskCreate( vTaskCode, “NAME”,STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );

// // 使用句柄來提高創(chuàng)建任務的優(yōu)先級 vTaskPrioritySet( xHandle,tskIDLE_PRIORITY + 1 ); // // 使用NULL參數(shù)來提高當前任務的優(yōu)先級,設置成和創(chuàng)建的任務相同。 vTaskPrioritySet( NULL, tskIDLE_PRIORITY +1 ); }

5. 任務掛起

5.1 函數(shù)描述

void vTaskSuspend( TaskHandle_txTaskToSuspend ); 掛起指定任務。被掛起的任務絕不會得到處理器時間,不管該任務具有什么優(yōu)先級。 調(diào)用vTaskSuspend函數(shù)是不會累計的:即使多次調(diào)用vTaskSuspend ()函數(shù)將一個任務掛起,也只需調(diào)用一次vTaskResume ()函數(shù)就能使掛起的任務解除掛起狀態(tài)。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskSuspend必須設置成1,此函數(shù)才有效。

5.2 參數(shù)描述

xTaskToSuspend:要掛起的任務句柄。為NULL表示掛起當前任務。

5.3 用法舉例

voidvAFunction( void ) { xTaskHandlexHandle; // 創(chuàng)建任務,保存任務句柄。 xTaskCreate( vTaskCode, “NAME”,STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle ); // // 使用句柄掛起創(chuàng)建的任務。 vTaskSuspend( xHandle ); // // 任務不再運行,除非其它任務調(diào)用了vTaskResume(xHandle ) // // 掛起本任務。 vTaskSuspend( NULL ); // 除非另一個任務使用handle調(diào)用了vTaskResume,否則永遠不會執(zhí)行到這里 }

6. 恢復掛起的任務

6.1 函數(shù)描述

void vTaskResume( TaskHandle_txTaskToResume ); 恢復掛起的任務。 通過調(diào)用一次或多次vTaskSuspend()掛起的任務,可以調(diào)用一次vTaskResume ()函數(shù)來再次恢復運行。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskSuspend必須置1,此函數(shù)才有效。

6.2 參數(shù)描述

xTaskToResume:要恢復運行的任務句柄。

6.3 用法舉例

voidvAFunction( void ) { xTaskHandle xHandle; // 創(chuàng)建任務,保存任務句柄 xTaskCreate( vTaskCode, “NAME”,STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle ); // // 使用句柄掛起創(chuàng)建的任務 vTaskSuspend( xHandle ); // //任務不再運行,除非其它任務調(diào)用了vTaskResume(xHandle ) // // 恢復掛起的任務。 vTaskResume( xHandle ); // 任務再一次得到處理器時間 // 任務優(yōu)先級與之前相同 }

7. 恢復掛起的任務(在中斷服務函數(shù)中使用)

7.1 函數(shù)描述

BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume );

用于恢復一個掛起的任務,用在ISR中。 通過調(diào)用一次或多次vTaskSuspend()函數(shù)而掛起的任務,只需調(diào)用一次xTaskResumeFromISR()函數(shù)即可恢復運行。 xTaskResumeFromISR()不可用于任務和中斷間的同步,如果中斷恰巧在任務被掛起之前到達,這就會導致一次中斷丟失(任務還沒有掛起,調(diào)用xTaskResumeFromISR()函數(shù)是沒有意義的,只能等下一次中斷)。這種情況下,可以使用信號量作為同步機制。在文件FreeRTOSConfig.h中,宏INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必須設置成1,此函數(shù)才有效。

7.2 參數(shù)描述

xTaskToResume:要恢復運行的任務句柄。

7.3 返回值

如果恢復任務后需要上下文切換返回pdTRUE,否則返回pdFALSE。由ISR確定是否需要上下文切換。

7.4 用法舉例

xTaskHandlexHandle; //注意這是一個全局變量 void vAFunction( void ){ // 創(chuàng)建任務并保存任務句柄 xTaskCreate( vTaskCode, “NAME”,STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle ); // 剩余代碼。 } void vTaskCode( void *pvParameters ){ for( ;; ) { // 在這里執(zhí)行一些其它功能 // 掛起自己 vTaskSuspend( NULL ); //直到ISR恢復它之前,任務會一直掛起 } }

void vAnExampleISR( void ){ portBASE_TYPExYieldRequired; // 恢復被掛起的任務 xYieldRequired = xTaskResumeFromISR(xHandle ); if( xYieldRequired == pdTRUE ) { // 我們應該進行一次上下文切換 // 注: 如何做取決于你具體使用,可查看說明文檔和例程 portYIELD_FROM_ISR(); } }

原文標題:FreeRTOS系列第11篇---FreeRTOS任務控制

文章出處:【微信公眾號:安芯教育科技】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RTOS
    +關注

    關注

    24

    文章

    856

    瀏覽量

    122206
  • FreeRTOS
    +關注

    關注

    14

    文章

    496

    瀏覽量

    65749

原文標題:FreeRTOS系列第11篇---FreeRTOS任務控制

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    代購系統(tǒng) API 介紹

    1. 用戶相關 API 用戶注冊 POST /api/users/register 參數(shù):username, email, password, phone 返回:user_id, token 用戶
    的頭像 發(fā)表于 10-08 09:21 ?67次閱讀

    京東API 介紹

    京東 API 是京東開放平臺提供的一組標準化接口,允許開發(fā)者通過程序化方式訪問京東生態(tài)的核心業(yè)務能力,涵蓋商品、訂單、物流、金融、智能客服等多個領域。以下是基于最新技術規(guī)范的詳細介紹: 一、核心
    的頭像 發(fā)表于 10-08 09:04 ?99次閱讀

    【RA4L1-SENSOR】4、移植FreeRTOS-CLI

    \"); } } 3、運行效果 編譯并下載程序后,串口控制臺的運行效果如視頻所示。 4、總結(jié) FreeRTOS-CLI對使用FreeRTOS的用戶來說,提供一種串口調(diào)試函數(shù)的方式,
    發(fā)表于 06-26 22:30

    FreeRTOS任務中發(fā)送事件隊列是有什么限制嗎?

    任務發(fā)送事件告知運動完成。 因為板卡有六路電機,每一路單獨控制的時候沒有什么問題。但是多路運行特別是多路復位的時候有的電機會卡死,查詢電機狀態(tài)顯示運行中,通過DEBUG發(fā)現(xiàn)每一路的電機復位指令下發(fā)
    發(fā)表于 06-11 07:57

    詳解FreeRTOS與SAFERTOS的區(qū)別

    開源免費的FreeRTOS由Richard Barry在WHIS工作時創(chuàng)建,WHIS基于FreeRTOS的功能模型,通過完整的HAZOP分析,確定了功能模型和API中的所有的弱點,減輕所有薄弱環(huán)節(jié),并采用IEC 61508 SI
    的頭像 發(fā)表于 06-04 16:58 ?573次閱讀
    詳解<b class='flag-5'>FreeRTOS</b>與SAFERTOS的區(qū)別

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?725次閱讀
    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)<b class='flag-5'>API</b><b class='flag-5'>函數(shù)</b>的引入

    極海APM32F407 uc/os3學習筆記之任務管理介紹

    最近了解了uc/os3這個操作系統(tǒng),上篇介紹了uc/os3如何正確移植到APM32F407開發(fā)板上,根據(jù)我最近學到的一些知識,這篇文章主要介紹一下uc/os3中的一些簡單的任務管理API
    的頭像 發(fā)表于 05-24 14:37 ?670次閱讀
    極海APM32F407 uc/os3學習筆記之<b class='flag-5'>任務</b>管理<b class='flag-5'>介紹</b>

    FreeRTOS讀取ADS1299數(shù)據(jù)有誤

    vTaskDelay(1) 在發(fā)送任務中:讀取隊列中的數(shù)據(jù)——發(fā)送到上位機 但是數(shù)據(jù)會出錯,正常數(shù)據(jù)的范圍是-1到1,用freertos就會出現(xiàn)超出正常范圍的數(shù)據(jù), 而在main函數(shù)的主循環(huán)中采集數(shù)據(jù)、濾波、發(fā)送到上位機就
    發(fā)表于 05-05 22:48

    ZU+RFSoC之RFDC API介紹和使用

    RF Data Converters驅(qū)動API是AMD Xilinx為RFSoC提供的一套軟件接口,用于控制Data Converters(RF-ADC和RF-DAC)的硬件功能。它作為用戶應用程序
    的頭像 發(fā)表于 04-16 10:05 ?2258次閱讀
    ZU+RFSoC之RFDC <b class='flag-5'>API</b><b class='flag-5'>介紹</b>和使用

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的一個關鍵特性,通過該函數(shù),用戶可以增強對任務管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?682次閱讀

    FreeRTOS進階使用之流緩沖區(qū):高效處理字節(jié)流的秘密武器

    在嵌入式開發(fā)中,流緩沖區(qū)(Stream Buffer)是FreeRTOS中用于高效處理字節(jié)流數(shù)據(jù)傳輸?shù)暮诵臋C制,尤其適合任務間或中斷與任務間的連續(xù)數(shù)據(jù)傳輸場景(如串口通信、網(wǎng)絡數(shù)據(jù)流等)。本文將深入
    發(fā)表于 03-24 11:37

    移植LWIP+FREERTOS時遇到的問題怎么解決?

    :將ST官網(wǎng)的LWIP1.4.1 的例子(關于LWIP的部分)移植到步驟1 的FreeRTOS 系統(tǒng)的工程里面,只是添加LWIP初始化的任務,并沒有調(diào)用任何接口的情況下可以Ping 通 而且長時間
    發(fā)表于 03-11 06:48

    如何找到DLP4500的API函數(shù)庫和說明手冊?

    您好,我買了一塊DLP4500,我是想采用C#編程,想通過調(diào)用API函數(shù)來重建點云。(C#如何調(diào)用API我會) 我看了很多資料,都是一些C++的例子,都沒有理出頭緒,麻煩指點一下。 重建點云,可以直接調(diào)用的
    發(fā)表于 03-03 06:18

    Java集合API的改進介紹

    簡介 本文我們將探討不同 jdk 版本中各類的起源,以及新引入的類和接口背后的目的。我們將分析之前版本存在的問題,以及為何需要引入新的類或接口。此外,我們還將介紹集合類和接口中的新特性。文章將逐一
    的頭像 發(fā)表于 11-22 11:12 ?767次閱讀
    Java集合<b class='flag-5'>API</b>的改進<b class='flag-5'>介紹</b>

    RTOS中鉤子函數(shù)的用途及用法

    在很多操作系統(tǒng)中,都存在這樣一類API函數(shù)接口:HOOK函數(shù)(也叫鉤子函數(shù))。
    的頭像 發(fā)表于 10-23 16:25 ?1017次閱讀
    RTOS中鉤子<b class='flag-5'>函數(shù)</b>的用途及用法