【Freertos基礎入門】2個Freertos的Delay函數

文章目錄

  • 前言
  • 一、vTaskDelay與vTaskDelayUntil
  • 二、示例代碼
  • 總結


前言

本系列基于stm32系列單片機來使用freerots

任務管理是實時操作系統(RTOS)的核心功能之一,它允許開發者以并發的方式組織和管理多個任務。FreeRTOS 是一個流行的開源RTOS,它提供了強大的任務管理功能,讓開發者能夠輕松創建和控制任務。本文將介紹 FreeRTOS 的任務管理功能,包括任務的創建、刪除、掛起、恢復和優先級控制等方面的內容。


一、vTaskDelay與vTaskDelayUntil

當我們在編寫多任務程序時,經常需要控制任務之間的時間間隔,讓它們按照一定的時間順序執行。這時就可以使用 FreeRTOS 提供的兩個函數:vTaskDelay 和 vTaskDelayUntil。

vTaskDelay:這個函數用于讓當前任務延遲一段時間后再繼續執行。你可以把它看作是一個暫停命令,告訴任務要等待一段時間后再繼續往下執行。函數原型如下:

void vTaskDelay( const TickType_t xTicksToDelay );

其中,xTicksToDelay 是一個時間參數,表示需要延遲的時鐘節拍數。時鐘節拍數的大小取決于系統的配置,一般情況下,1 個時鐘節拍對應一定的時間單位,例如毫秒。調用這個函數后,當前任務會暫停執行指定的時間,然后再繼續往下執行。使用pdMS_TO_TICKS()把ms變成節拍數,在前面我們也了解了一點.

vTaskDelayUntil:這個函數用于讓當前任務在指定的時間點后再繼續執行。你可以把它看作是一個定時器,告訴任務要在特定的時間點再次運行。函數原型如下:

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

其中,pxPreviousWakeTime 是一個指向時間變量的指針,表示任務上次喚醒的時間。xTimeIncrement 是一個時間增量,表示任務需要等待的時間長度。調用這個函數后,當前任務會根據上次喚醒時間和時間增量計算出下次喚醒的時間,然后暫停執行,直到達到指定的時間后再繼續執行。

區別:

vTaskDelay 是相對延遲,即任務會在當前時間的基礎上延遲一段時間。
vTaskDelayUntil 是絕對延遲,即任務會在上次喚醒時間的基礎上延遲一段時間。

二、示例代碼

void vTask1(void* pvParameters)
{TickType_t xLastWakeTime;const TickType_t xDelay = pdMS_TO_TICKS(1000); // 設置延遲時間為 1000ms// 初始化上次喚醒時間xLastWakeTime = xTaskGetTickCount(); while (1){// 任務執行代碼vTaskDelayUntil(&xLastWakeTime, xDelay);}
}void vTask2(void* pvParameters)
{while (1){// 任務執行代碼vTaskDelay(pdMS_TO_TICKS(500)); // 延遲 500ms}
}

在上面的示例中,vTask1 和 vTask2 是兩個并發運行的任務。vTask1 使用 vTaskDelayUntil 函數將任務定時在每隔 1000ms 運行一次。vTask2 使用 vTaskDelay 函數延遲 500ms 后再繼續執行。通過這兩個函數,我們可以靈活地控制任務之間的時間間隔,實現多任務并發執行。

注意:vTaskDelayUntil(&xLastWakeTime, xDelay);他延時完后,會自動更新xLastWakeTime,所以我們只需要在while循環初始化一下xLastWakeTime就行了。


總結

任務管理是 FreeRTOS 提供的一個強大功能,它允許開發者以并發的方式組織和管理多個任務。通過任務的創建、刪除、掛起、恢復和優先級控制等操作,開發者可以靈活地控制任務的執行順序和調度策略,從而實現復雜的系統功能。任務通信與同步機制進一步增強了任務的協同工作能力,使任務之間能夠高效地共享數據和協調操作。借助 FreeRTOS 提供的任務管理功能,開發者可以更加方便地構建實時嵌入式系統,并具備可靠性和高效性。

需要注意的是,在使用 FreeRTOS 進行任務管理時,開發者需要注意任務的資源管理、優先級設置和調度策略等方面,以確保系統能夠穩定地運行,并滿足實時性和響應性的要求。

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

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

相關文章

嵌入式開發中常用且雜散的命令

1、mount命令 # 掛載linux系統 mkdir /tmp/share mount -t nfs 10.77.66.88:/share/ /tmp/share -o nolock,tcp cd /tmp/share# 掛載Windows系統 mkdir /tmp/windows mount -t nfs 10.66.77.88:/c/public /tmp/windows -o nolock,tcp cd /tmp/windows# 掛載vfat格式的U盤 mkdi…

強訓第32

選擇 D B A A 發送TCP意思應該是已經建立了連接,會超時重傳。在未建立連接的時候,會放棄該鏈接 C A 80端口是http A 交換機攻擊主要有五種:VLAN跳躍攻擊 生成樹攻擊 MAC表洪水攻擊 ARP攻擊 VTP攻擊 B A 2^(32-26)2^(32-27)2^(32-27)128 減去…

基于Java+SpringBoot+Vue+echarts健身房管理系統設計和實現

博主介紹:?全網粉絲30W,csdn特邀作者、博客專家、CSDN新星計劃導師、Java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? 🍅文末獲取源碼聯系🍅 👇🏻 精彩專…

maven Jar包反向install到本地倉庫

maven Jar包反向install到本地倉庫 需求實現 需求 項目打包時報錯,缺少一個jar包。 但是在maven倉庫都找不到此jar包,其他人提供了這個jar包。 需要把這個jar包install到本地倉庫,使項目能正常打包運行。 實現 使用git bash命令執行以下腳…

16.3.4 【Linux】系統資源的觀察

free :觀察內存使用情況 系統當中有 2848MB 左右的實體內存,我的 swap 有 1GB 左右, 那我使用free -m 以 MBytes 來顯示時,就會出現上面的信息。Mem 那一行顯示的是實體內存的量,Swap 則是內存交換空間的量。 total 是…

C++多態

文章目錄 🐵1. 什么是多態🐶2. 構成多態的條件🐩2.1 虛函數🐩2.2 虛函數的重寫🐩2.3 final 和 override關鍵字🐩2.4 重載、重寫、重定義對比 🐱3. 虛函數表🐯4. 多態的原理&#x1f…

神經網絡基礎-神經網絡補充概念-17-計算神經網絡的輸出

計算神經網絡的輸出通常涉及前向傳播(Forward Propagation)的過程,其中輸入數據通過網絡的層級結構,逐步被傳遞并變換,最終生成預測結果。下面我將為你展示一個簡單的神經網絡前向傳播的示例。 假設我們有一個具有以下…

【變形金剛01】attention和transformer所有信息

圖1.來源:Arseny Togulev在Unsplash上的照片 一、說明 這是一篇 長文 ,幾乎討論了人們需要了解的有關注意力機制的所有信息,包括自我注意、查詢、鍵、值、多頭注意力、屏蔽多頭注意力和轉換器,包括有關 BERT 和 GPT 的一些細節。因…

OpenCV圖像處理——輪廓檢測

目錄 圖像的輪廓查找輪廓繪制輪廓 輪廓的特征輪廓面積輪廓周長輪廓近似凸包邊界矩形最小外接圓橢圓擬合直線擬合 圖像的矩特征矩的概念圖像中的矩特征 圖像的輪廓 查找輪廓 binary,contours,hierarchycv.findContours(img,mode,method)繪制輪廓 cv.drawContours(img,coutours…

WSL2安裝Ubuntu,配置機器學習環境

文章目錄 1.WSL2安裝Ubuntu,更改安裝位置,作為開發環境供vscode和pycharm使用:2.更換國內源:3.安裝圖形界面:4.安裝cudacudnntorch5.安裝opencv6.調用攝像頭7.使用yolov8測試 WSL全稱Windows Subsystem for Linux&…

印度貨代專線【我國到印度專線有哪些方式】

隨著全球貿易的不斷發展,我國與印度之間的貿易往來也日益頻繁。作為兩個人口最多的國家之一,中國和印度之間的貨物運輸需求不斷增長。為了滿足這一需求,印度貨代專線應運而生,為進出口商提供高效、可靠的貨物運輸服務。本文將探索…

939. 最小面積矩形;2166. 設計位集;2400. 恰好移動 k 步到達某一位置的方法數目

939. 最小面積矩形 核心思想:枚舉矩形的右邊那條邊的兩個點,并用一個哈希表存儲相同縱坐標的最近出現的列的列數,不斷更新最近出現的左邊那條邊。 2166. 設計位集 核心思想:這題主要是時間復雜度的優化,用一個flag來標記當前翻轉…

CSS自學框架之表單

首先我們看一下表單樣式,下面共有5張截圖 一、CSS代碼 /*表單*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend標簽是CSS中用于定義…

IOS開發-XCode14介紹與入門

IOS開發-XCode14介紹與入門 1. XCODE14的小吐槽2. XCODE的功能bar一覽3. XCODE項目配置一覽4. XCODE更改DEBUG/RELEASE模式5. XCODE單元測試 1. XCODE14的小吐槽 iOS開發工具一直有個毛病,就是新版本的開發工具的總會有一些奇奇怪怪的bug。比如在我的Mac-Pro&#…

Springboot 實踐(3)配置DataSource及創建數據庫

前文講述了利用MyEclipse2019開發工具,創建maven工程、加載springboot、swagger-ui功能。本文講述創建數據庫,為項目配置數據源,實現數據的增刪改查服務,并通過swagger-ui界面舉例調試服務控制器 創建數據庫 項目使用MySQL 8.0.…

vue基礎知識四:Vue實例掛載的過程

一、思考 我們都聽過知其然知其所以然這句話 那么不知道大家是否思考過new Vue()這個過程中究竟做了些什么? 過程中是如何完成數據的綁定,又是如何將數據渲染到視圖的等等 一、分析 首先找到vue的構造函數 源碼位置:src\core\instance\…

一生一芯4——使用星火應用商店在ubuntu下載QQ、微信、百度網盤

星火應用商店可以非常方便的完成一些應用的下載,下面是官方網址 http://spark-app.store/download 我使用的是intel處理器,無需下載依賴項,直接點擊軟件本體 我這里下載amd64,根據自己的處理器下載對應版本 sudo apt install ./spark-stor…

做視頻_Style

Video 1> 風格2> 技巧3> 借鑒 🔗 B站視頻 1> 風格 記錄分享生活,工作,學習方面的總結; 4個段位: 實用 -> 簡潔 -> 清晰流暢 -> 生動有趣 2> 技巧 1> 大視頻分段錄制,最后合并…

pytorch入門-神經網絡

神經網絡的基本骨架 import torch from torch import nn #nn模塊是PyTorch中用于構建神經網絡模型的核心模塊。它提供了各種類和函數,可以幫助你定義和訓練神經網絡。class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__() #調用 super(Tudui,…

數據結構入門指南:二叉樹

目錄 文章目錄 前言 1. 樹的概念及結構 1.1 樹的概念 1.2 樹的基礎概念 1.3 樹的表示 1.4 樹的應用 2. 二叉樹 2.1 二叉樹的概念 2.2 二叉樹的遍歷 前言 在計算機科學中,數據結構是解決問題的關鍵。而二叉樹作為最基本、最常用的數據結構之一,不僅在算法…