STM32-FreeRTOS操作系統-任務管理

引言

隨著嵌入式技術的飛速發展,STM32與FreeRTOS的融合愈發緊密。本文聚焦于STM32平臺下FreeRTOS操作系統的任務管理,旨在為開發者提供清晰的思路與實用的技巧,助力高效開發。

為什么要進行任務管理?

在嵌入式系統中,任務管理是確保系統高效、穩定運行的關鍵環節。隨著系統功能的日益復雜,多個任務需要同時運行,且每個任務都有其優先級和資源需求。任務管理通過合理分配處理器時間、優化任務調度、確保任務間通信順暢,使系統能夠高效處理多任務,避免任務沖突和資源浪費。它還能提高系統的響應速度和可靠性,確保關鍵任務優先執行,從而提升用戶體驗和系統性能。

任務的掛起與恢復

任務掛起是任務管理中的一個重要機制,其主要目的是為了更合理地分配系統資源和優化任務調度。當一個任務暫時不需要運行時,將其掛起可以釋放處理器時間,讓其他更重要的任務得以執行,從而提高系統的整體效率。

vTaskSuspend(*任務句柄)

vTaskSuspend()是FreeRTOS 中用于掛起任務的函數。它允許將一個任務置于掛起狀態,使其暫時停止執行,直到被恢復為止。其函數原型為:

void vTaskSuspend( TaskHandle_t xTaskToSuspend );

里面需要填的參數為需要掛起的任務函數的句柄。其功能是將指定的任務置于掛起狀態,使其不再被調度器調度,同時掛起的任務也不會占用處理器的時間,直到被恢復為止。(注:如果任務已經被掛起,則再次調用vTaskSuspend()不會產生任何效果)

vTaskResume(*任務句柄)

vTaskResume()是 FreeRTOS 中用于恢復掛起任務的函數。當一個任務被掛起后,使用 ? vTaskResume()可以將其從掛起狀態恢復到就緒狀態,使其可以被調度器調度并繼續執行。參數也是跟上面的一樣,填入要恢復的任務句柄。如果該任務已經掛起,調用該函數后,該任務將被恢復到就緒運行狀態。(注:如果任務已經處于就緒狀態或運行狀態,則再次調用vTaskResume()不會產生任何效果)

任務的刪除

在FreeRTOS中,任務刪除是一個重要的機制,主要用于動態管理任務的生命周期。當用戶不再需要執行某個任務時,可以對該任務進行刪除。因為每個任務都會占用一定系統資源,刪除任務可以釋放這些資源,供其它任務使用。

vTaskDelete(*任務句柄)

其函數原型為:

void vTaskDelete( TaskHandle_t xTaskToDelete );

參數是要刪除任務的句柄。如果是在任務內調用該函數,參數也可以傳入NULL,表示刪除當前任務。同樣,如果任務已經處于刪除狀態,再次調用該函數不會產生任何效果。(注:刪除任務后任務不可恢復)

完整示例代碼

#include "myfreertos.h"
#include "FreeRTOS.h"
#include "SysTick.h"
#include "Usart.h"
#include "oled.h"
#include "Task.h"
#include "led.h"
#include "key.h"TaskHandle_t MyTaskHandler;//任務句柄TaskHandle_t MyTask1Handler;//任務1句柄TaskHandle_t MyTask2Handler;//任務2句柄TaskHandle_t MyTask3Handler;//任務3句柄void MyTask(void *pvParameters);    //聲明啟動函數void MyTask1(void *pvParameters);   //聲明任務1函數void MyTask2(void *pvParameters);   //聲明任務2函數void MyTask3(void *pvParameters);   //聲明任務3函數void Start_Task(void)
{xTaskCreate(MyTask,"MyTask",128,NULL,1,&MyTaskHandler);//動態方法創建任務vTaskStartScheduler();//啟動任務調動		
}void MyTask(void *arg)            //開始創建任務函數
{taskENTER_CRITICAL();           //進入臨界區xTaskCreate(MyTask1,"MyTask1",50,NULL,2,&MyTask1Handler);//動態方法創建任務1xTaskCreate(MyTask2,"MyTask2",50,NULL,3,&MyTask2Handler);//動態方法創建任務2xTaskCreate(MyTask3,"MyTask3",50,NULL,4,&MyTask3Handler);//動態方法創建任務3vTaskDelete(MyTaskHandler);    //刪除開始任務taskEXIT_CRITICAL();           //退出臨界區
}void MyTask1(void *arg)     //任務1函數體
{u32 cnt=0;                 //定義變量while(1){OLED_ShowString(1,1,"Runing Task1");OLED_ShowNum(2,1,cnt,3);GPIO_ResetBits(GPIOC,GPIO_Pin_13);vTaskDelay(300);GPIO_SetBits(GPIOC,GPIO_Pin_13);vTaskDelay(900);if(++cnt>=10)     //如果超過10次{if(MyTask1Handler!=NULL)  //判斷句柄是否有效{vTaskDelete(MyTask1Handler);  //刪除任務1MyTask1Handler=NULL;          //清空句柄}}}	
}void MyTask2(void *arg)      //任務2函數體
{while(1){OLED_ShowString(1,1,"Runing Task2");GPIO_ResetBits(GPIOC,GPIO_Pin_15);delay_ms(1000);                 //延時產生任務調度GPIO_SetBits(GPIOC,GPIO_Pin_15);vTaskDelay(300);	}	
}void MyTask3(void *arg)      //任務3函數體
{while(1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)!=0){vTaskSuspend(MyTask2Handler);/* 掛起任務2 */OLED_ShowString(3,1,"S");}else{vTaskResume(MyTask2Handler);/* 恢復任務2*/OLED_ShowString(3,1,"R");}vTaskDelay(100);}	
}

總結

本文僅僅簡單介紹了基于STM32單片機FreeRTOS操作系統中的任務管理,如有不足,歡迎指出,謝謝!

?

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

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

相關文章

工業領域 ACP 協議全解析:從入門到實戰案例

工業領域 ACP 協議全解析:從入門到實戰案例 文章目錄工業領域 ACP 協議全解析:從入門到實戰案例一、前言二、ACP 協議是什么?1. 基本定義2. 與數據傳輸協議的區別三、ACP 協議的核心功能1. 身份認證(Authentication)2.…

計算機組成原理:計算機硬件的基本組成

📌目錄🖥? 計算機硬件的基本組成:從經典到現代的架構演進🧩 一、計算機硬件的五大部分:功能與協同📥 (一)輸入設備:人機交互的“入口”📤 (二&am…

AI歌手功能終于上線!Suno AI 帶你保存歌曲的靈魂

當我們談論一首歌時,究竟是什么讓它“獨一無二”?是主唱的聲音質感?是旋律里的氛圍?還是那種無法復制的風格氣息? 如今,Suno AI 給出了答案—— AI歌手功能正式上線! 🌟什么是「AI…

Dubbo3.3 Triple協議處理東西向流量

前言 Apache Dubbo 3.3 對 Triple 協議做了升級,現在 Dubbo 不僅可以處理東西向流量,也可以處理南北向流量。 **東西向流量(East-West Traffic) ** 指數據中心或網絡內部同級設備/服務之間的通信。例如,微服務之間的…

操作系統核心特點詳解:從并發到分布式,一文搞懂考研必備知識

操作系統核心特點詳解:從并發到分布式,一文搞懂考研必備知識 大家好,今天咱們來聊聊操作系統(OS)這個計算機世界的“大管家”。想象一下,你的電腦就像一個忙碌的廚房,操作系統就是那個廚師長&am…

2025精選5款AI視頻轉文字工具,高效轉錄秒變文字!

視頻轉文本的需求早已滲透到生活的方方面面:網課學習需要提取課件臺詞、會議記錄想快速整理要點、追劇時急需生肉轉字幕…… 手動記錄不僅費時,還容易遺漏關鍵信息。今天就分享5款實用工具,從免費到專業全覆蓋,幾步操作就能讓視頻…

MyBatis Example模式SQL注入風險

在使用MyBatis逆向工程生成的Example查詢模式時,很多開發者看到XML中存在${}占位符就會擔心SQL注入問題。但實際上,存在${}并不等同于存在SQL注入風險。本文將詳細分析何時會存在真正的注入風險。 存在SQL注入的兩個關鍵前提 前提一:Criteria…

寶塔PostgreSQL安裝pgvecto插件contrib包實現向量存儲

1. 寶塔安裝 首先確保你的寶塔已經安裝了 PostgreSQL。 安裝好后是能看到上面這個界面的。 我安裝的是 16.1 版本,下面的教程講的也是 16.1 版本的。 2.開放防火墻的端口號 5432 3.允許外部訪問所有數據庫 4.設置超級管理員用戶密碼 用戶名默認為:po…

麒麟系統 doc轉pdf

# 安裝LibreOffice(如果尚未安裝) sudo apt update sudo apt install libreoffice# 將DOC轉換為PDF libreoffice --headless --convert-to pdf 你的文檔.doc# 或者指定輸出目錄 libreoffice --headless --convert-to pdf --outdir /輸出目錄 你的文檔.do…

Python實現生成矩形框、三角形框、六邊形框和圓環點云

本節我們分享上節提到的不填充點云。在點云處理、計算機視覺與工業檢測中,幾何輪廓(邊框/環)點云比實心點云更能反映物體的邊緣特征、結構骨架與形貌突變區域。Python 借助 NumPy 即可快速生成矩形邊框、三角形邊框、六邊形邊框與圓環點云&am…

2025年本體論:公理與規則的挑戰與趨勢

摘要本文章旨在深入探討本體論(Ontology)中公理(Axioms)與規則(Rules)的核心概念、技術實現、驗證方法、性能評估及其在2025年的前沿趨勢與挑戰。公理與規則是構建嚴謹、一致知識模型的邏輯基石&#xff0c…

【51單片機】【protues仿真】基于51單片機PM2.5空氣質量檢測系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示 2、按鍵?設置閾值 3、PM2.5大于閾值時啟動聲光警報 二、使用步驟 基于51單片機的PM2.5空氣質量檢測系統通常采用STC89C51/52作為核心控制器,結合…

【目錄-單選】鴻蒙HarmonyOS開發者基礎

用哪一種裝飾器修飾的組件可作為頁面入口組件?Look at the answer下面是ArkTS中類名、枚舉名推薦的代碼風格是 Look at the answer向服務器提交表單數據,以下哪種請求方式比較合適 Look at the answer使用http發起網絡請求,需要以下哪種權限&…

maven【maven】技術詳解

MavenMaven的本質是項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)Project Object Model:項目對象管理模型作用: 項目構建:提供標準的、跨平臺的自動化項目構建方式依賴管理:方…

【操作系統-Day 25】死鎖 (Deadlock):揭秘多線程編程的“終極殺手”

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

【嵌入式C語言】七

8.4函數的聲明和定義聲明一個函數意味著向編譯器描述函數名、返回值、參數個數和類型,但并不會為函數分配存儲空間定義一個函數意味著在聲明變量的同時還要有具體的實現,并且會為函數分配存儲空間8.5多源文件的函數聲明和定義8.6預處理指令#Include#incl…

hardhat3 源神 -- 啟動!

Hardhat 項目開發環境搭建完整指南 1. 從 GitHub 下載項目 # 使用 SSH 方式克隆(需要配置 SSH key) git clone gitgithub.com:NomicFoundation/hardhat.git# 或使用 HTTPS 方式 git clone https://github.com/NomicFoundation/hardhat.git# 進入項目目錄…

遇到 Git 提示大文件無法上傳確實讓人頭疼

遇到 Git 提示大文件無法上傳確實讓人頭疼,但別擔心,我們可以一步步來解決。為了讓你更清晰地了解整個流程,我先用一個表格來概括主要步驟:步驟核心操作關鍵命令/工具示例 (用于刪除歷史中的大文件)1. 定位大文件使用 Git 命令或工…

機器人控制器開發(傳感器層——奧比大白相機適配)

編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1: 運行時報錯: [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not load library…

C語言(長期更新)第15講 指針詳解(五):習題實戰

C語言(長期更新)第15講 指針詳解(五):習題實戰 跟著潼心走,輕松拿捏C語言,困惑通通走,一去不回頭~歡迎開始今天的學習內容,你的支持就是博主最大的動力。博主主頁&#…