FreeRtos實戰從入門到精通--任務創建和刪除(動態方法)--事了拂衣去,深藏功與名

FreeRtos是之前的一些聰明的工程師寫的免費且開源的嵌入式實時操作系統代碼,由于我們實際工作中不需要再去寫rtos,我們只需要用就行了,所以博主這里只分享項目工程實戰相關的內容,具體rtos源碼,可以無需理會,除非你要自己寫一個rtos。

另外rtos的移植的話,博主會放在最后一章,因為也沒什么用(畢竟cubemx或者類似S32DS等軟件已經可以一鍵生成帶freertos的工程了)。

廢話說完了,干貨走起。

———————————————————————————————————————————

1.以rtos的形式開發時,首先是在main函數中進行相關外設的初始化,之后創建個start_task任務,start_task用于創建實際項目應用所需要的各個執行任務,創建完start任務之后,開始任務調度器的任務調度。

外設的初始化代碼如下:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組4	 delay_init();	    				//延時函數初始化	 uart_init(115200);					//初始化串口LED_Init();		  					//初始化LEDLCD_Init();							//初始化LCDPOINT_COLOR = RED;LCD_ShowString(30,10,200,16,16,"ATK STM32F103/F407");	LCD_ShowString(30,30,200,16,16,"FreeRTOS Examp 6-1");LCD_ShowString(30,50,200,16,16,"Task Creat and Del");LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,90,200,16,16,"2016/11/25");

2.創建任務:

之后main函數中要先創建開始任務,創建完成之后開始任務調度,代碼如下:

//創建開始任務xTaskCreate((TaskFunction_t )start_task,            //任務函數(const char*    )"start_task",          //任務名稱(uint16_t       )START_STK_SIZE,        //任務堆棧大小(void*          )NULL,                  //傳遞給任務函數的參數(UBaseType_t    )START_TASK_PRIO,       //任務優先級(TaskHandle_t*  )&StartTask_Handler);   //任務句柄              vTaskStartScheduler();          //開啟任務調度

這個地方我們展開說一下創建任務的接口及所需變量定義:

創建任務接口:

BaseType_t xTaskCreate(	TaskFunction_t pxTaskCode,const char * const pcName,const uint16_t usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */

①其中pxTaskCode為實際的任務接口名稱,具體實現見下:

//開始任務任務函數
void start_task(void *pvParameters)
{taskENTER_CRITICAL();           //進入臨界區//創建TASK1任務xTaskCreate((TaskFunction_t )task1_task,             (const char*    )"task1_task",           (uint16_t       )TASK1_STK_SIZE,        (void*          )NULL,                  (UBaseType_t    )TASK1_TASK_PRIO,        (TaskHandle_t*  )&Task1Task_Handler);   //創建TASK2任務xTaskCreate((TaskFunction_t )task2_task,     (const char*    )"task2_task",   (uint16_t       )TASK2_STK_SIZE,(void*          )NULL,(UBaseType_t    )TASK2_TASK_PRIO,(TaskHandle_t*  )&Task2Task_Handler); vTaskDelete(StartTask_Handler); //刪除開始任務taskEXIT_CRITICAL();            //退出臨界區
}

注意:start任務的主要功能為創建項目工程實際需要使用的具體任務,需要在創建完其他任務之后,刪除掉start任務,所謂的“事了拂衣去,深藏功與名”

②pcName:即任務字符串名稱,跟上一個任務名稱保持一致即可;

③usStackDepth:即任務堆棧大小;

④pvParameters:傳遞給任務函數的參數,這里我們一般為NULL即可;

⑤uxPriority:任務優先級,注意freertos的任務優先級不同于中斷優先級,freertos的任務優先級是值越大,優先級越高;

⑥pxCreatedTask:任務句柄,用來存放任務的相關信息;

任務相關參數的定義示例如下:

//任務優先級
#define START_TASK_PRIO		1
//任務堆棧大小	
#define START_STK_SIZE 		128  
//任務句柄
TaskHandle_t StartTask_Handler;
//任務函數
void start_task(void *pvParameters);

3.刪除任務:

vTaskDelete(StartTask_Handler); //刪除開始任務

調用接口示例如上,vTaskDelate(NULL);時為刪除當前任務;

3.集成示例:

之后我們創建task1和task2,在task1和task2的任務函數中的相關代碼結構如下:

void task1_task(void *pvParameters)
{//init codewhile(1){//action code}
}

我們這里實現的task1和task2的任務邏輯為,task1按照1s為周期切換LCD屏幕區域的填充顏色,且在任務執行五次之后刪除任務2;

task2的任務執行邏輯為按照1s為周期切換LCD屏幕的填充顏色;

實際效果見下:(后續會上傳視頻,視頻正在審核中)

freertos的任務創建及刪除演示視頻

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

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

相關文章

Java通用Mapper自定義方法

目錄 一、定義通用 Mapper 接口二、繼承通用 Mapper 實現自定義方法三、注冊自定義 Mapper 接口四、在實體類對應的 Mapper 接口中使用自定義方法五、實現自定義方法的 SQL 邏輯注解方式XML 映射文件方式六、使用自定義方法七、注意事項在 Java 持久層開發中,MyBatis 的通用 M…

Android WebRTC回聲消除

文章目錄 安卓可用的回聲消除手段各種回聲消除技術優缺點WebRTC回聲消除WebRTC回聲消除回聲消除處理流程WebRTC AECM APP 安卓可用的回聲消除手段 硬件回聲消除 使用 AudioRecord 的 VOICE_COMMUNICATION 模式:通過 AudioRecord 的 VOICE_COMMUNICATION 音頻源可以…

基于 SAFM 超分辨率上采樣模塊的 YOLOv12 改進方法—模糊場景目標檢測精度提升研究

在復雜視覺環境中,如低光照、霧天或遠距離拍攝等場景下,圖像質量下降導致目標模糊,使得傳統目標檢測模型難以實現高精度識別。YOLO系列作為主流單階段檢測框架,在速度和精度方面表現出色,但在模糊和小目標場景中仍存在性能瓶頸。本文提出一種面向 YOLOv12 的創新性改進方法…

Spring 事務的底層原理常見陷阱

一、Spring 事務的底層原理 1. 核心機制 動態代理(AOP): Spring 通過動態代理(JDK 或 CGLIB)生成代理對象,攔截被 Transactional 注解標記的方法。事務攔截器: TransactionInterceptor 負責管…

Java SE(6)——類和對象(一)

1.初始面向對象 1.1 什么是面向對象 Java是一門純面向對象的編程語言(Object Oriented Program,簡稱OOP),在面向對象的世界里,一切皆為對象。面向對象是解決問題的一種思想,主要依靠對象之間的交換來完成一件事情 1.2 面向過程…

cpp細碎知識點

1 重寫 (Override): 派生類中定義一個與基類虛函數具有相同函數簽名(函數名、參數列表、返回類型)的函數,這被稱為重寫。 重寫意味著派生類提供了基類虛函數的一個特定于派生類的實現。 重寫是實現多態的關鍵 2 虛基類 (Virtual Base Class…

若依 FastAPI + Vue3 項目 Docker 部署筆記( 啟動器打包教程)

本文記錄了將 start.bat 打包成 .exe 啟動器的詳細教程,適合項目交付或導師演示用。 🧭 一、如何將 start.bat 打包為啟動器 .exe(含圖標 自動打開瀏覽器) ? 1. 創建三大功能腳本 start.bat → 啟動項目(docke…

基于springboot的金院銀行廳預約系統的設計及實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著信息技術在管理上越來越深入而廣泛的應用,信息管理系統的實施在技術上已逐步成熟。信息管理系統是一個不斷發展的新型學科,任何一個單位要生存要發展,要高效率地把內部活動有機地組織起來,就必須建立與自身特點相適應的…

創意控制臺:下雨動畫特效(ASCII 雨滴下落)

在編程的世界里,控制臺不僅僅是輸出文本信息的工具,通過巧妙的代碼設計,我們還能在其中創造出充滿趣味的動態畫面。本文將帶領大家使用 C 語言打造一個創意控制臺下雨動畫特效,利用 ASCII 字符模擬雨滴下落的過程,為單…

MySQL--索引入門

MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。 Mysql在存儲數據之外,數據庫系統各種還維護著滿足特定查找算法的數據結構,這些數據結構以某種引用(指向)表中的數據…

MIT XV6 - 1.2 Lab: Xv6 and Unix utilities - pingpong

接上文 MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么? pingpong 不務正業了那么久(然而并沒有,雖然還在探索sleep,但是教材我已經看完了前三章了),讓我們趕緊繼續下去 在進行本實驗之前請務…

前端面經-VUE3篇(二)--vue3組件知識(一)組件注冊、props 與 emits、透傳、插槽(Slot)

組件允許我們將 UI 劃分為獨立的、可重用的部分,并且可以對每個部分進行單獨的思考。在實際應用中,組件常常被組織成一個層層嵌套的樹狀結構: 一、注冊 Vue 組件本質上是一個可以復用的 自定義 HTML 元素,為了在其他組件中使用一…

LeetCode —— 102. 二叉樹的層序遍歷

😶?🌫?😶?🌫?😶?🌫?😶?🌫?Take your time ! 😶?🌫?😶?🌫?😶?🌫?😶?🌫?…

Linux第20節 --- inode和文件系統

一、沒有被打開的文件 如果一個文件沒有被打開,那么該文件存儲在哪里? 該文件是存儲在磁盤當中的! 文件 文件內容 文件屬性! 文件的內容是按照數據塊存儲的;文件的屬性其實就是inode(是一個128字節的…

1.PowerBi保姆級安裝教程

1.進入power bi網站 PowerBi下載鏈接 2.下載power bi軟件 3.雙擊安裝 4.下一步 5.下一步 6.下一步 7.下一步 8.安裝 9.雙擊桌面圖標

Android Studio中OpenCV應用詳解:圖像處理、顏色對比與OCR識別

文章目錄 一、OpenCV在Android中的集成與配置1.1 OpenCV簡介1.2 在Android Studio中集成OpenCV1.2.1 通過Gradle依賴集成1.2.2 通過模塊方式集成1.2.3 初始化OpenCV 1.3 OpenCV基礎類介紹 二、指定區域圖像抓取與對比2.1 圖像抓取基礎2.2 指定區域圖像抓取實現2.2.1 從Bitmap中…

前端面試每日三題 - Day 22

今天我們將深入探討 JavaScript 中的 Set 和 Map 數據結構,了解它們的特性及應用場景。接下來,我們會分析 React 的 Suspense 和 Concurrent Mode 的工作原理,探索它們如何提升應用的性能和用戶體驗。最后,我們將學習如何設計一個…

[Vue]編程式導航

在 Vue 中&#xff0c;編程式導航是通過 JavaScript 代碼&#xff08;而非 <router-link> 標簽&#xff09;動態控制路由跳轉的核心方式。這個方法依賴于 Vue Router 提供的 API&#xff0c;能更靈活地處理復雜場景&#xff08;如異步操作、條件跳轉等&#xff09;。 一、…

鄒曉輝教授十余年前關于圍棋程序與融智學的思考,體現了對復雜系統本質的深刻洞察,其觀點在人工智能發展歷程中具有前瞻性意義。我們可以從以下三個維度進行深入解析:

鄒曉輝教授十余年前關于圍棋程序與融智學的思考&#xff0c;體現了對復雜系統本質的深刻洞察&#xff0c;其觀點在人工智能發展歷程中具有前瞻性意義。我們可以從以下三個維度進行深入解析&#xff1a; 一、圍棋程序的二元解構&#xff1a;數據結構與算法的辯證關系 1.1.形式…

The Traitor King (10 player 25 player)

The Traitor King 十字軍試煉尾王成就。叛變的國王&#xff1a;在30秒內殺死40只蟲群甲蟲。考驗團隊配合的成就。比不朽者&#xff0c;黑曜石31等等強度大&#xff0c;甚至感覺比寶庫地風火難。