【學習FreeRTOS】第11章——FreeRTOS中任務相關的其他API函數

1.函數總覽

序號函數描述
1uxTaskPriorityGet()獲取任務優先級
2vTaskPrioritySet()設置任務優先級
3uxTaskGetNumberOfTasks()獲取系統中任務的數量
4uxTaskGetSystemState()獲取所有任務的狀態信息
5vTaskGetInfo()獲取單個任務的狀態信息
6xTaskGetCurrentTaskHandle()獲取當前任務的任務句柄
7xTaskGetHandle()獲取指定任務的任務句柄
8uxTaskGetStackHighWaterMark()獲取任務的任務棧歷史剩余最小值
9eTaskGetState()獲取任務狀態
10vTaskList()以“表格”形式獲取所有任務的信息
11vTaskGetRunTimeStats()獲取任務的運行時間等信息
12xTaskGetApplicationTaskTag()獲取任務Tag
13vTaskSetApplicationTaskTag()設置任務Tag
14pcTaskGetName()獲取任務名
15xTaskGetSchedulerState()獲取任務調度器狀態
16xTaskGetIdleTaskHandle()獲取空閑任務的任務句柄
17xTaskGetTickCount()獲取系統時鐘節拍計數器的值
18xTaskGetTickCountFromISR()中斷中獲取系統使用節拍計數器的值
19GetThreadLocalStoragePointer()獲取任務的獨有數據記錄數組指針
20setThreadLocalStoragePointer()設置任務的獨有數據記錄數組指針

這些API函數主要用于程序調試階段,查看任務運行狀態,以及統計任務時間占比(空
閑任務占比越大,代表應用程序壓力越小)

【本文只闡述一些比較重要的API,其他API可以查閱FreeRTOS官網】

2.重點函數介紹

2.1獲取任務優先級

UBaseType_t  uxTaskPriorityGet(const TaskHandle_t xTask)
  • 此函數用于獲取指定任務的任務優先級,使用該函數需將宏 INCLUDE_uxTaskPriorityGet置1
  • 形參:xTask,要查找的任務句柄(NULL代表任務自身)
  • 返回值:整數,任務優先級數值

2.2.設置任務優先級

void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority )
  • 此函數用于改變某個任務的任務優先級,使用該函數需將宏 INCLUDE_vTaskPrioritySet置1
  • 形參:xTask,任務句柄(NULL代表任務自身);uxNewPriority,需要設置的任務優先級

2.3.獲取系統中任務數量

UBaseType_t uxTaskGetNumberOfTasks(void)
  • 此函數用于獲取系統中任務的任務數量
  • 返回值:整型,系統中任務的數量

2.4.獲取所有任務的狀態信息

UBaseType_t  uxTaskGetSystemState(	TaskStatus_t * const 				pxTaskStatusArray,const UBaseType_t 					uxArraySize,configRUN_TIME_COUNTER_TYPE* const 	pulTotalRunTime)
typedef struct xTASK_STATUS
{TaskHandle_t 					xHandle;                /* 任務句柄 */ const char *		 			pcTaskName;             /* 任務名 */ UBaseType_t						xTaskNumber;            /* 任務編號 */ eTaskState e					CurrentState;           /* 任務狀態 */ UBaseType_t 					uxCurrentPriority;      /* 任務優先級 */ UBaseType_t 					uxBasePriority;         /* 任務原始優先級*/ configRUN_TIME_COUNTER_TYPE 	ulRunTimeCounter; 		/* 任務運行時間*/StackType_t * 					pxStackBase;            /* 任務棧基地址 */ configSTACK_DEPTH_TYPE 			usStackHighWaterMark;  	/* 任務棧歷史剩余最小值 */ 
} TaskStatus_t;
  • 此函數用于獲取系統中所有任務的任務狀態信息,使用該函數需將宏configUSE_TRACE_FACILITY置1
  • 形參:xTaskStatusArray,指向TaskStatus_t 結構體數組首地址(一般要自行分配)
  • 形參:uxArraySize,接收信息的數組大小(一般為任務數量)
  • 形參:pulTotalRunTime,系統總運行時間,為NULL 則省略總運行時間值(一般為NULL)
  • 返回值:整型,獲取信息的任務數量

2.5.獲取單個任務的狀態信息

void vTaskGetInfo(	TaskHandle_t 	xTask, TaskStatus_t* 	pxTaskStatus, 	BaseType_t 		xGetFreeStackSpace,eTaskState 		eState)
typedef enum
{   eRunning = 0,	/* 運行態 */ eReady			/* 就緒態 */ eBlocked, 		/* 阻塞態 */ eSuspended, 	/* 掛起態 */ eDeleted, 		/* 任務被刪除 */ eInvalid		/* 無效 */ 
} eTaskState;
  • 此函數用于獲取指定的單個任務的狀態信息,使用該函數需將宏configUSE_TRACE_FACILITY置1
  • 形參:xTask,指定獲取信息的任務的句柄
  • 形參:pxTaskStatus,接收任務信息的變量
  • 形參:xGetFreeStackSpace,任務棧歷史剩余最小值(當為pdFALSE跳過這個步驟,當為pdTRUE檢查歷史剩余最小堆棧)
  • 形參:eState,任務狀態,可直接賦值,如想獲取代入“eInvalid”

2.6.獲取當前任務的任務句柄

TaskHandle_t xTaskGetCurrentTaskHandle(void) 
  • 此函數用于獲取當前任務的任務句柄,使用該函數需將宏 INCLUDE_xTaskGetCurrentTaskHandle置1
  • 返回值:TaskHandle_t ,當前任務的任務句柄

2.7.獲取指定任務的任務句柄

TaskHandle_t xTaskGetHandle(const char* pcNameToQuery); 
  • 此函數用于通過任務名獲取任務句柄,使用該函數需將宏 INCLUDE_xTaskGetHandle置1
  • 形參:pcNameToQuery,任務名
  • 返回值:TaskHandle,任務句柄

2.8.獲取任務的任務棧歷史剩余最小值

UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)
  • 此函數用于獲取指定任務的任務棧歷史最小剩余堆棧,使用該函數需將宏 INCLUDE_uxTaskGetStackHighWaterMark置1
  • 形參:xTask,任務句柄
  • 返回值:UBaseType_t,任務棧的歷史剩余最小值

2.9.獲取任務狀態

eTaskState    eTaskGetState(TaskHandle_t xTask)
typedef enum
{   eRunning = 0,	/* 運行態 */ eReady			/* 就緒態 */ eBlocked, 		/* 阻塞態 */ eSuspended, 	/* 掛起態 */ eDeleted, 		/* 任務被刪除 */ eInvalid		/* 無效 */ 
} eTaskState;
  • 此函數用于查詢某個任務的運行狀態,使用此函數需將宏 INCLUDE_eTaskGetState置1
  • 形參:xTask,待獲取狀態任務的任務句柄
  • 返回值:eTaskState,任務狀態

2.10.以“表格”形式獲取所有任務的信息(類似于2.4獲取所有任務的狀態信息)

void vTaskList(char* pcWriteBuffer)
  • 此函數用于以“表格”的形式獲取系統中任務的信息,使用此函數需將宏 configUSE_TRACE_FACILITY、configUSE_STATS_FORMATTING_FUNCTIONS 置1
  • 形參:pcWriteBuffer,接收任務信息的緩存指針

Name: 創建任務的時候給任務分配的名字。
State: 任務的壯態信息,X是運行態,B是阻塞態, R是就緒態,S是掛起態, D是刪除態
Priority :任務優先級。
Stack : 任務堆棧的“高水位線”,就是堆棧歷史最小剩余大小。
Num : 任務編號,這個編號是唯一的,當多個任務使用同一個任務名的時候可以通過此編號來做區分。
在這里插入圖片描述

2.11.獲取任務的運行時間等信息

Void vTaskGetRunTimeStats(char * pcWriteBuffer)
  • 此函數用于統計任務的運行時間信息,使用此函數需將宏 configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS 置1
  • 形參:pcWriteBuffer,接收任務運行時間信息的緩存指針

Task:任務名稱
Abs Time:任務實際運行的總時間(絕對時間)
% Time:占總處理時間的百分比
在這里插入圖片描述

時間統計API函數使用流程:

  1. 將宏 configGENERATE_RUN_TIME_STATS 置1
  2. 將宏 configUSE_STATS_FORMATTING_FUNCTIONS 置1
  3. 當將此宏 configGENERATE_RUN_TIME_STATS 置1之后,還需要實現2個宏定義:
    ① portCONFIGURE_TIMER_FOR_RUNTIME_STATE() :用于初始化用于配置任務運行時間統計的時基定時器(該函數一般調用時基定時器的初始化,配置時間精度,這個時基定時器的計時精度需高于系統時鐘節拍精度的10至100倍!)
    ② portGET_RUN_TIME_COUNTER_VALUE():用于獲取該功能時基硬件定時器計數的計數值(一般在時基函數初始化時置0,在定時器中斷中自增)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Excel自動化辦公——Openpyxl的基本使用

Excel自動化辦公——Openpyxl的基本使用 個人感覺,相比Pandas,openpyxl對Excel的操作更為細致,Pandas則更適用于統計計算; 01 基本環境02 Excel數據讀取操作03 案例04 向Excel寫入數據05 表數據定向修改06 單元格樣式制定07 單元…

原型對象的簡單了解

在前面學習java有一個概念叫做繼承,方便我們對父類方法、變量等的調用。對前端的學習我們需要讓對象可以訪問和繼承其他對象的屬性和方法,就需要了解原型對象,以及原型鏈。 一、原型 構造函數通過原型分配的函數是所有對象所共享的。每一個構…

【Lua語法】算術、條件、邏輯、位、三目運算符

1.算術運算符 加減乘除取余: - * / % Lua中獨有的:冪運算 ^ 注意: 1.Lua中沒有自增自減(、–),也沒有復合運算符(、-) 2.Lua中字符串可以進行算術運算符操作,會自動轉成number 如:“10.3” 1 結果為11.3…

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖)

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖) 目錄 回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖)效果一覽基本介紹…

【css動畫】向下的動態箭頭

前言 使用css實現一組向下的動態箭頭效果&#xff0c;如下圖 思路 1.使用svg畫箭頭 2.設置keyframes&#xff0c;主要是每個箭頭加不同的延時。 代碼 <div class"down-arrow"><svg id"more-arrows"><polygonclass"arrow-top&quo…

Spark第三課

1.分區規則 1.分區規則 shuffle 1.打亂順序 2.重新組合 1.分區的規則 默認與MapReduce的規則一致,都是按照哈希值取余進行分配. 一個分區可以多個組,一個組的數據必須一個分區 2. 分組的分區導致數據傾斜怎么解決? 擴容 讓分區變多修改分區規則 3.HashMap擴容為什么必須…

[JavaWeb]【七】web后端開發-MYSQL

前言&#xff1a;MySQL是一種流行的關系型數據庫管理系統,它的作用是存儲和管理數據。在Web開發中,MySQL是必備的數據庫技能之一,因為它可以幫助Web開發人員處理大量的數據,并且提供了強大的數據查詢和管理功能。 一 數據庫介紹 1.1 什么是數據庫 1.2 數據庫產品 二 MySQL概述…

Servlet+JDBC實戰開發書店項目講解第六篇:訂單實現

ServletJDBC實戰開發書店項目講解第六篇&#xff1a;訂單實現 1. 數據庫設計 在訂單實現之前&#xff0c;我們需要對數據庫進行相應的設計。在這個書店項目中&#xff0c;我們可以創建以下兩個表來實現訂單功能&#xff1a; 1.1 訂單表(Order) 訂單ID(order_id)&#xff1a…

vue3 實現簡單瀑布流

一、整理思路 實際場景中&#xff0c;瀑布流一般由 父組件 提供 數據列表&#xff0c;子組件渲染每個圖片都是根據容器進行 絕對定位 &#xff0c;從而定好自己的位置取出 屏幕的寬度&#xff0c;設定 圖片的寬度 固定 為一個值&#xff0c;計算可以鋪 多少列按列數 先鋪上第一…

使用Julia進行核遞歸最小二乘算法(KRLS)的解析與實現

F 標題&#xff1a; 使用Julia進行核遞歸最小二乘算法&#xff08;KRLS&#xff09;的深度解析與實現 第一部分&#xff1a; 核遞歸最小二乘算法 (KRLS) 是一個在線核回歸算法&#xff0c;這種算法的主要特點是能夠一次處理一個樣本&#xff0c;并構建一個訓練點字典&#xf…

5G科技防汛,助力守護一方平安

“立秋雖已至&#xff0c;炎夏尚還在”&#xff0c;受臺風席卷以及季節性影響全國多地正面臨強降水的嚴峻挑戰。“落雨又順秋&#xff0c;綿綿雨不休”&#xff0c;正值“七下八上” 防汛關鍵時期&#xff0c;貴州省水文水資源局已全面進入備戰狀態。 為確保及時響應做好防汛搶…

Vue3 setup新特性簡單應用

去官網學習→組合式 API&#xff1a;setup() | Vue.js 運行示例&#xff1a; 代碼&#xff1a;App.vue <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><!-- msg 組件傳遞數據 --><Hell…

VBA_MF系列技術資料1-157

MF系列VBA技術資料 為了讓廣大學員在VBA編程中有切實可行的思路及有效的提高自己的編程技巧&#xff0c;我參考大量的資料&#xff0c;并結合自己的經驗總結了這份MF系列VBA技術綜合資料&#xff0c;而且開放源碼&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04屬于定…

MySQL 面試題

一、數據庫基礎 1、MySQL 有哪些數據庫類型? (1) 整數類型&#xff1a; TINYINT 1 字節 SMALLINT 2 字節 MEDIUMINT 3 字節 INT 4 字節 BIGINT 8 字節 ① 任何整數類型都可以加上 UNSIGNED …

【學會動態規劃】最長湍流子數組(23)

目錄 動態規劃怎么學&#xff1f; 1. 題目解析 2. 算法原理 1. 狀態表示 2. 狀態轉移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后&#xff1a; 動態規劃怎么學&#xff1f; 學習一個算法沒有捷徑&#xff0c;更何況是學習動態規劃&#xff0c; 跟我…

vue+elementui 實現文本超出長度顯示省略號,鼠標移上懸浮展示全部內容

一、場景 表單內的輸入框一般為固定寬度&#xff0c;當輸入框內容長度超出輸入框寬度時&#xff0c;需要顯示省略號&#xff0c;并設置鼠標移到輸入框上時懸浮展示全部內容。 <el-tooltipplacement"top-start"effect"light":content"basicData[Or…

在 IDEA 中使用 Git開發 圖文教程

在 IDEA 中使用 Git開發 圖文教程 一、連接遠程倉庫二、IDEA利用Git進行開發操作三、分支操作3.1 新建分支3.2 切換分支3.3 刪除分支3.4 比較分支3.5 合并分支 四、常用快捷鍵 一、連接遠程倉庫 一、打開IDEA&#xff0c;進入目錄&#xff1a;File ->New ->Project from…

Skywalking全鏈路追蹤【學習筆記】

Skywalking全鏈路追蹤的服務搭建&#xff0c;使用docker進行安裝。 搭建服務 搭建【ES】 # 拉取 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 啟動 docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.typesingle-nod…

什么是 SPI,和API有什么區別?

面試回答 Java 中區分 API 和 SPI&#xff0c;通俗的講&#xff1a;API 和 SPI 都是相對的概念&#xff0c;他們的差別只在語義上&#xff0c;API 直接被應用開發人員使用&#xff0c;SPI 被框架擴展人員使用。 API Application Programming Interface 大多數情況下&#xff…

opencv 矩陣運算

1.矩陣乘&#xff08;*&#xff09; Mat mat1 Mat::ones(2,3,CV_32FC1);Mat mat2 Mat::ones(3,2,CV_32FC1);Mat mat3 mat1 * mat2; //矩陣乘 結果 2.元素乘法或者除法&#xff08;mul&#xff09; Mat m Mat::ones(2, 3, CV_32FC1);m.at<float>(0, 1) 3;m.at…