在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

FreeRTOS中的任務(wù)管理

CHANBAEK ? 來(lái)源: FunIO ? 作者: FunIO ? 2023-11-27 17:03 ? 次閱讀

任務(wù)概述

任務(wù)是 FreeRTOS 中最基本的調(diào)度單元,它是一段可執(zhí)行的代碼,可以獨(dú)立運(yùn)行。FreeRTOS 中的任務(wù)是基于優(yōu)先級(jí)的搶占式調(diào)度,優(yōu)先級(jí)高的任務(wù)可以搶占優(yōu)先級(jí)低的任務(wù)的 CPU 資源。任務(wù)的創(chuàng)建、刪除、掛起、恢復(fù)、設(shè)置優(yōu)先級(jí)等操作都是通過調(diào)用 API 函數(shù)來(lái)實(shí)現(xiàn)的。

任務(wù)的創(chuàng)建

任務(wù)的創(chuàng)建是通過調(diào)用 xTaskCreate 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                        const char * const pcName,
                        const configSTACK_DEPTH_TYPE usStackDepth,
                        void * const pvParameters,
                        UBaseType_t uxPriority,
                        TaskHandle_t * const pxCreatedTask );

參數(shù)說(shuō)明:

  • pxTaskCode:任務(wù)函數(shù)的入口地址。
  • pcName:任務(wù)的名字,用于調(diào)試。
  • usStackDepth:任務(wù)棧的大小,單位為字。
  • pvParameters:傳遞給任務(wù)函數(shù)的參數(shù)。
  • uxPriority:任務(wù)的優(yōu)先級(jí)。
  • pxCreatedTask:任務(wù)創(chuàng)建成功后,返回任務(wù)句柄。

任務(wù)的刪除

任務(wù)的刪除是通過調(diào)用 vTaskDelete 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

void vTaskDelete( TaskHandle_t xTask );

參數(shù)說(shuō)明:

  • xTask:任務(wù)句柄。

任務(wù)的掛起和恢復(fù)

任務(wù)的掛起和恢復(fù)是通過調(diào)用 vTaskSuspendxTaskResume 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

void vTaskSuspend( TaskHandle_t xTaskToSuspend );
BaseType_t xTaskResume( TaskHandle_t xTaskToResume );

參數(shù)說(shuō)明:

  • xTaskToSuspend:掛起任務(wù)句柄。
  • xTaskToResume:恢復(fù)任務(wù)句柄。

任務(wù)的優(yōu)先級(jí)

任務(wù)的優(yōu)先級(jí)是通過調(diào)用 vTaskPrioritySetxTaskPriorityGet 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
UBaseType_t xTaskPriorityGet( TaskHandle_t xTask, BaseType_t * pxPreviousPriority );

參數(shù)說(shuō)明:

  • xTask:任務(wù)句柄。
  • uxNewPriority:新的優(yōu)先級(jí)。
  • pxPreviousPriority:保存原來(lái)的優(yōu)先級(jí)。

注意: 在 FreeRTOS 中,優(yōu)先級(jí)數(shù)值越大,優(yōu)先級(jí)越高,任務(wù)的優(yōu)先級(jí)不能超過 configMAX_PRIORITIES 宏定義的值。

任務(wù)的延時(shí)

任務(wù)的延時(shí)是通過調(diào)用 vTaskDelay 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

void vTaskDelay( const TickType_t xTicksToDelay );

參數(shù)說(shuō)明:

  • xTicksToDelay:延時(shí)時(shí)間,單位為時(shí)鐘節(jié)拍。

任務(wù)的阻塞

任務(wù)的阻塞是通過調(diào)用 vTaskDelayUntil 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement );

參數(shù)說(shuō)明:

  • pxPreviousWakeTime:保存上一次喚醒的時(shí)間。
  • xTimeIncrement:下一次喚醒的時(shí)間增量。

任務(wù)的阻塞和喚醒

任務(wù)的阻塞和喚醒是通過調(diào)用 xTaskNotifyWaitxTaskNotify 函數(shù)來(lái)實(shí)現(xiàn)的,函數(shù)原型如下:

UBaseType_t xTaskNotifyWait( UBaseType_t uxBitsToClearOnEntry, UBaseType_t uxBitsToClearOnExit, uint32_t * pulNotificationValue, TickType_t xTicksToWait );
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, UBaseType_t uxTaskPriority, uint32_t ulValue, eNotifyAction eAction );

參數(shù)說(shuō)明:

  • uxBitsToClearOnEntry:在任務(wù)進(jìn)入阻塞前,需要清除的任務(wù)通知位。
  • uxBitsToClearOnExit:在任務(wù)退出阻塞前,需要清除的任務(wù)通知位。
  • pulNotificationValue:保存任務(wù)通知值。
  • xTicksToWait:阻塞時(shí)間。
  • xTaskToNotify:需要通知的任務(wù)句柄。
  • uxTaskPriority:需要通知的任務(wù)優(yōu)先級(jí)。
  • ulValue:需要通知的任務(wù)通知值。

Playground

創(chuàng)建任務(wù)

創(chuàng)建 2 個(gè)優(yōu)先級(jí)都是1的任務(wù).

#include < freertos/FreeRTOS.h >
#include < freertos/task.h >
#include < stdio.h >

// 任務(wù)1的函數(shù)
void task1(void *pvParameter) {
    while (1) {
        printf("這是任務(wù)1n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);  // 1秒的延遲
    }
}

// 任務(wù)2的函數(shù)
void task2(void *pvParameter) {
    while (1) {
        printf("這是任務(wù)2n");
        vTaskDelay(2000 / portTICK_PERIOD_MS);  // 2秒的延遲
    }
}

void app_main() {
    // 創(chuàng)建任務(wù)1
    xTaskCreate(task1, "task1", 2048, NULL, 1, NULL);

    // 創(chuàng)建任務(wù)2
    xTaskCreate(task2, "task2", 2048, NULL, 1, NULL);
}

運(yùn)行一下,輸出:

這是任務(wù)1
這是任務(wù)1
這是任務(wù)2
這是任務(wù)1
這是任務(wù)1
這是任務(wù)2
這是任務(wù)1
這是任務(wù)1
這是任務(wù)2
這是任務(wù)1
這是任務(wù)1
這是任務(wù)2
...

我們稍加修改,將任務(wù) 1 中的任務(wù)延時(shí)去掉,看看任務(wù) 1 會(huì)不獨(dú)占 CPU 資源:

#include < freertos/FreeRTOS.h >
#include < freertos/task.h >
#include < stdio.h >

// 任務(wù)1的函數(shù)
void task1(void *pvParameter) {
    while (1) {
    }
}

// 任務(wù)2的函數(shù)
void task2(void *pvParameter) {
    while (1) {
        printf("這是任務(wù)2n");
        vTaskDelay(2000 / portTICK_PERIOD_MS);  // 2秒的延遲
    }
}

void app_main() {
    // 創(chuàng)建任務(wù)1
    xTaskCreate(task1, "task1", 2048, NULL, 2, NULL);

    // 創(chuàng)建任務(wù)2
    xTaskCreate(task2, "task2", 2048, NULL, 1, NULL);
}

運(yùn)行一下,輸出:

這是任務(wù)2
這是任務(wù)2
E (5509) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (5509) task_wdt:  - IDLE (CPU 0)
E (5509) task_wdt: Tasks currently running:
E (5509) task_wdt: CPU 0: task1
E (5509) task_wdt: Print CPU 0 (current core) registers
Core  0 register dump:
MEPC    : 0x42007356  RA      : 0x40385920  SP      : 0x3fc90a50  GP      : 0x3fc8b000
0x42007356: task1 at C:/Users/Peter/Desktop/udp_server/main/udp_server.c:7 (discriminator 1)

0x40385920: vPortTaskWrapper at C:/Users/Peter/esp/esp-idf/components/freertos/FreeRTOS-Kernel/portable/riscv/port.c:205

TP      : 0x3fc88554  T0      : 0x00000000  T1      : 0x00000000  T2      : 0x00000000
S0/FP   : 0x00000000  S1      : 0x00000000  A0      : 0x00000000  A1      : 0x00000000
A2      : 0x00000000  A3      : 0x00000000  A4      : 0x00000000  A5      : 0x42007356
0x42007356: task1 at C:/Users/Peter/Desktop/udp_server/main/udp_server.c:7 (discriminator 1)

A6      : 0x00000000  A7      : 0x00000000  S2      : 0x00000000  S3      : 0x00000000
S4      : 0x00000000  S5      : 0x00000000  S6      : 0x00000000  S7      : 0x00000000
S8      : 0x00000000  S9      : 0x00000000  S10     : 0x00000000  S11     : 0x00000000
T3      : 0x00000000  T4      : 0x00000000  T5      : 0x00000000  T6      : 0x00000000
MSTATUS : 0x00000000  MTVEC   : 0x00000000  MCAUSE  : 0x00000000  MTVAL   : 0x00000000
MHARTID : 0x00000000
這是任務(wù)2
這是任務(wù)2
...

可以看到,相同優(yōu)先級(jí)的任務(wù) 2 依然可以正常運(yùn)行,而任務(wù) 1 則觸發(fā)了看門狗。兩個(gè)任務(wù)按照時(shí)間片輪轉(zhuǎn)的方式共享 CPU 資源。可以想見,如果任務(wù) 1 的優(yōu)先級(jí)比任務(wù) 2 高,那么任務(wù) 1 就會(huì)獨(dú)占 CPU 資源,任務(wù) 2 就無(wú)法運(yùn)行了。

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

    關(guān)注

    68

    文章

    10902

    瀏覽量

    213014
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62395
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62971
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69049
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62395
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FreeRTOS介紹與基礎(chǔ)任務(wù)創(chuàng)建

    本篇介紹FreeRTOS與基礎(chǔ)任務(wù)創(chuàng)建
    的頭像 發(fā)表于 09-26 09:00 ?2495次閱讀
    <b class='flag-5'>FreeRTOS</b>介紹與基礎(chǔ)<b class='flag-5'>任務(wù)</b>創(chuàng)建

    轉(zhuǎn):第10章 FreeRTOS任務(wù)管理

    第10章FreeRTOS任務(wù)管理 對(duì)于初學(xué)者,特別是對(duì)于沒有RTOS基礎(chǔ)的同學(xué)來(lái)說(shuō),了解FreeRTOS任務(wù)
    發(fā)表于 08-23 09:54

    梳理一下FreeRTOS任務(wù)管理單元實(shí)現(xiàn)思路

    關(guān)注、星標(biāo)嵌入式客棧,精彩及時(shí)送達(dá)[導(dǎo)讀] 學(xué)習(xí)梳理一下FreeRTOS任務(wù)管理單元實(shí)現(xiàn)思路,代碼分析基于V10.4.3。從本文開始計(jì)劃寫個(gè)圖解freeRTOS內(nèi)核系列筆記分享給朋友們
    發(fā)表于 01-13 07:08

    FreeRTOS任務(wù)如何創(chuàng)建和刪除?

    FreeRTOS移植到Cortex-M3硬件平臺(tái)的文章,我們已經(jīng)見過任務(wù)創(chuàng)建API,但那篇文章的重點(diǎn)在于如何移植FreeRTOS,本文將重點(diǎn)放在
    的頭像 發(fā)表于 03-11 18:08 ?2993次閱讀

    (一)FreeRTOS學(xué)習(xí)之FreeRTOS任務(wù)基礎(chǔ)知識(shí)

    FreeRTOS學(xué)習(xí)之FreeRTOS任務(wù)基礎(chǔ)知識(shí)轉(zhuǎn)行小白一枚,通過博客記錄自我學(xué)習(xí),望更多博友多多指點(diǎn),感激不盡!RTOS系統(tǒng)的核心就是任務(wù)管理
    發(fā)表于 12-23 19:57 ?3次下載
    (一)<b class='flag-5'>FreeRTOS</b>學(xué)習(xí)之<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>基礎(chǔ)知識(shí)

    FreeRTOS任務(wù)詳解

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

    圖解FreeRTOS 原理系列之任務(wù)管理器基本框架

    [導(dǎo)讀] 學(xué)習(xí)梳理一下FreeRTOS任務(wù)管理單元實(shí)現(xiàn)思路,代碼分析基于V10.4.3。從本文開始計(jì)劃寫個(gè)圖解freeRTOS內(nèi)核系列筆記分享給朋友們,...
    發(fā)表于 01-25 19:49 ?4次下載
    圖解<b class='flag-5'>FreeRTOS</b> 原理系列之<b class='flag-5'>任務(wù)</b><b class='flag-5'>管理</b>器基本框架

    FreeRTOS高級(jí)篇2---FreeRTOS任務(wù)創(chuàng)建分析

    FreeRTOS基礎(chǔ)系列《FreeRTOS系列第10篇---FreeRTOS任務(wù)創(chuàng)建和刪除》中介紹了任務(wù)創(chuàng)建API函數(shù)xTaskCreat
    發(fā)表于 01-26 17:42 ?23次下載
    <b class='flag-5'>FreeRTOS</b>高級(jí)篇2---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>創(chuàng)建分析

    FreeRTOS系列第11篇---FreeRTOS任務(wù)控制

    FreeRTOS任務(wù)控制API函數(shù)主要實(shí)現(xiàn)任務(wù)延時(shí)、任務(wù)掛起、解除任務(wù)掛起、任務(wù)優(yōu)先級(jí)獲取和設(shè)置
    發(fā)表于 01-26 17:54 ?12次下載
    <b class='flag-5'>FreeRTOS</b>系列第11篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>控制

    FreeRTOS系列第10篇---FreeRTOS任務(wù)創(chuàng)建和刪除

    FreeRTOS移植到Cortex-M3硬件平臺(tái)的文章,我們已經(jīng)見過任務(wù)創(chuàng)建API,但那篇文章的重點(diǎn)在于如何移植FreeRTOS,本文將重點(diǎn)放在
    發(fā)表于 01-26 17:56 ?13次下載
    <b class='flag-5'>FreeRTOS</b>系列第10篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務(wù)</b>創(chuàng)建和刪除

    freeRTOS任務(wù)

    freeRTOS系統(tǒng)的任務(wù)切換的具體過程最終都是在pendSV中斷服務(wù)函數(shù)里面完成的。
    的頭像 發(fā)表于 02-10 11:02 ?1694次閱讀
    <b class='flag-5'>freeRTOS</b>的<b class='flag-5'>任務(wù)</b>

    FreeRTOS的空閑任務(wù)是什么

    空閑任務(wù)FreeRTOS 必不可少的一個(gè)任務(wù),其他 RTOS 類系統(tǒng)也有空閑任務(wù),比如 uC/OS。看名字就知道,空閑任務(wù)是處理器空閑的
    的頭像 發(fā)表于 07-30 10:55 ?1325次閱讀

    FreeRTOS任務(wù)通知簡(jiǎn)介

    任務(wù)通知簡(jiǎn)介 任務(wù)通知在 FreeRTOS 是一個(gè)可選的功能,要使用任務(wù)通知的話就需要將宏configUSE_TASK_NOTIFICAT
    的頭像 發(fā)表于 07-30 11:34 ?780次閱讀

    FreeRTOS內(nèi)存管理實(shí)現(xiàn)

    FreeRTOS是一個(gè)為嵌入式系統(tǒng)設(shè)計(jì)的開源實(shí)時(shí)操作系統(tǒng)。它提供了一個(gè)多任務(wù)內(nèi)核和一系列功能,適合在資源受限的設(shè)備上管理實(shí)時(shí)任務(wù)和應(yīng)用程序。Free
    的頭像 發(fā)表于 10-10 16:17 ?920次閱讀
    <b class='flag-5'>FreeRTOS</b>內(nèi)存<b class='flag-5'>管理</b>實(shí)現(xiàn)

    freertos最多支持多少個(gè)任務(wù)

    FreeRTOS是一個(gè)輕量級(jí)的實(shí)時(shí)操作系統(tǒng)(RTOS),其設(shè)計(jì)初衷就是為了提供簡(jiǎn)單、可靠且高效的實(shí)時(shí)任務(wù)管理。關(guān)于FreeRTOS最多支持多少個(gè)任務(wù)
    的頭像 發(fā)表于 09-02 14:21 ?1183次閱讀
    主站蜘蛛池模板: 亚洲www在线| 2019天天射干 | 手机看片1024在线 | 亚洲线精品一区二区三区 | 天天做日日爱 | 日日干视频 | 最新久久免费视频 | 色牛网| 天天操天天射天天舔 | 日本aaaaa毛片在线视频 | 日本三级强在线观看 | 九九福利 | 性久久久久久 | 久久精品久 | 在线看片国产 | 午夜亚洲国产精品福利 | 最新国产你懂的在线网址 | 免费国产成人α片 | 国产yin乱大巴视频 国产爱v | 黄色在线观看网址 | 优优优色| www.四虎影| 色婷婷九月 | 亚洲黄色三级 | 一个色亚洲| 91伊人久久大香线蕉 | 四虎永久在线观看免费网站网址 | 亚洲欧美7777| 永久免费精品影视网站 | 色无欲天天天影视综合网 | 97天天摸天天碰天天爽 | 日韩免费观看视频 | 狠狠做深爱婷婷综合一区 | 色视频免费观看高清完整 | 你懂的网站在线观看网址 | 99热99热 | 黄色日屁 | 天天色天天拍 | 性xxxxx| 国产三a级日本三级日产三级 | 你懂的在线视频观看 |