RM新时代网站-首页

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

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

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

FreeRTOS中相對延時和絕對延時的區(qū)別

璟琰乀 ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-11-24 15:44 ? 次閱讀

嵌入式軟件代碼中延時是很常見的,只是延時種類有很多,看你用什么延時。

1

一個延時的問題

問題:周期性(固定一個時間)去處理某一件事情。你會通過什么方式去實現(xiàn)?

比如:間隔10ms去采集傳感器的數(shù)據(jù),然后通過一種算法計算出一個結(jié)果,最后通過串口發(fā)送出去。

可能對于很多習(xí)慣裸機編程的讀者,首先想到的是:利用定時器,定時10ms中斷,在中斷里面處理。

中斷函數(shù)適合處理簡單數(shù)據(jù),不適合算法、通信等需要長時間占用CPU的處理。

對計時精度要求比較高的地方適合定時器,像本章節(jié)說的周期性采集傳感器數(shù)據(jù),要求不適合很高,那么就引入本文說的絕對延時。

在實時操作系統(tǒng)FreeRTOS任務(wù)中,利用vTaskDelayUntil絕對延時即可完美解決這個問題。

嵌入式專欄

2

相對延時和絕對延時的含義

本文拿FreeRTOS中相對延時函數(shù)vTaskDelay,絕對延時函數(shù)vTaskDelayUntil來說明。

相對延時: 指每次延時都是從執(zhí)行函數(shù)vTaskDelay()開始,直到延時指定的時間(參數(shù):滴答值)結(jié)束。

絕對延時: 指每隔指定的時間(參數(shù):滴答值),執(zhí)行一次調(diào)用vTaskDelayUntil()函數(shù)的任務(wù)。

文字描述可能不夠直觀理解,下面章節(jié)結(jié)合代碼例子、延時值(IO高低變化波形)、任務(wù)執(zhí)行圖來詳細講述一下他們的區(qū)別。

嵌入式專欄

3

相對延時和絕對延時區(qū)別

以實際代碼為例說明:一個任務(wù)中,添加一個10ms系統(tǒng)延時,然后,在執(zhí)行任務(wù)(耗時1ms左右,例子以延時代替)。

相對延時代碼:

絕對延時代碼:

說明:

1. TestDelay這個延時函數(shù)僅僅用于測試(延時1ms),用于代替采集、算法、發(fā)送等耗時時間。

2. 兩個代碼唯一區(qū)別在于系統(tǒng)延時不同,一個vTaskDelay(10);,一個vTaskDelayUntil(&xLastWakeTime, 10);

3. 系統(tǒng)時鐘頻率為1000,也就是上面系統(tǒng)延時10個滴答,即10ms。

看到代碼,你想到了他們輸出結(jié)果的差異嗎?

來看下結(jié)果的差異:用PA0這個引腳輸出的高低電平,得出延時時間。

相對延時結(jié)果:

絕對延時結(jié)果:

結(jié)果為: 相對延時的周期為系統(tǒng)延時10ms + 執(zhí)行任務(wù)1ms的時間,總共11ms時間。絕對延時的周期即為10ms時間。

嵌入式專欄

4

換一種方式看區(qū)別

如果上面的區(qū)別還沒明白,再來講一個更容易理解的區(qū)別,通過文字 + 任務(wù)執(zhí)行圖來說明。

1.相對延時

先看任務(wù)執(zhí)行圖,按照上面代碼的方式呈現(xiàn):

這里會牽涉到操作系統(tǒng)任務(wù)切換、高優(yōu)先級任務(wù)搶占等一些原理,若不了解,請轉(zhuǎn)移直到了解再回來。

上電,TEST任務(wù)進入延時(阻塞)狀態(tài),此時系統(tǒng)執(zhí)行其他就緒任務(wù)。FreeRTOS內(nèi)核會周期性的檢查TEST任務(wù)的阻塞是否達到,如果阻塞時間達到,則將TEST任務(wù)設(shè)置為就緒狀態(tài),如果就緒任務(wù)中TEST任務(wù)的優(yōu)先級最高,則會搶占CPU,再次執(zhí)行任務(wù)主體代碼,不斷循環(huán)。

TEST任務(wù)每次系統(tǒng)延時都是從調(diào)用延時函數(shù)vTaskDelay()開始算起的,所以叫相對延時。

從上圖可以看出:

如果執(zhí)行TEST任務(wù)的過程中發(fā)生中斷,或者具有更高優(yōu)先級的任務(wù)搶占了,那么TEST任務(wù)執(zhí)行的周期就會變長,所以使用相對延時函數(shù)vTaskDelay(),不能周期性的執(zhí)行TEST任務(wù)。

2.絕對延時

代碼中定義的變量xLastWakeTime,其實是用來保存上一次的系統(tǒng)計數(shù)器值(方便檢測下一個延時時間是否到來)。

和上面相對延時程序執(zhí)行圖比較,可以看出,系統(tǒng)延時的時間包含了程序執(zhí)行的時間。即時中途有中斷,或更高優(yōu)先級任務(wù)打斷,不會影響下一次執(zhí)行的時間(也就是這個周期不會變,當(dāng)然,打斷時間不能超過系統(tǒng)延時值)。

提示: 圖片中添加了一段話:一般來說,程序執(zhí)行時間要小于總間隔時間(10ms)。

如果打斷時間太長,回來之后延時都超過了,則會立馬執(zhí)行程序,不會再延時(任務(wù)不會再阻塞延時)。

責(zé)任編輯:haq

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

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304796
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3785

    瀏覽量

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

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
收藏 人收藏

    評論

    相關(guān)推薦

    FPGA延時Verilog HDL實現(xiàn)

    可以在任意時刻啟動,可以重復(fù)啟動,延時時長可調(diào),單位可切換(ms/us),在50MHz時鐘下的延時范圍是1ms-85899ms/1us-85899us。
    的頭像 發(fā)表于 11-05 11:26 ?219次閱讀

    延時開關(guān)需要零線嗎為什么

    延時開關(guān)是一種常見的電氣控制元件,廣泛應(yīng)用于各種電氣設(shè)備和系統(tǒng)。它的作用是在電路引入一定的延時,以實現(xiàn)對電路的控制和保護。延時開關(guān)的種類
    的頭像 發(fā)表于 08-19 15:56 ?430次閱讀

    延時開關(guān)接線技巧與注意事項有哪些

    延時開關(guān)的接線技巧與注意事項是確保延時開關(guān)正確安裝和穩(wěn)定運行的關(guān)鍵。 一、延時開關(guān)接線技巧 1. 理解延時開關(guān)的基本結(jié)構(gòu) 延時開關(guān)通常包含多
    的頭像 發(fā)表于 08-19 15:54 ?775次閱讀

    延時開關(guān)改手動開關(guān)怎么接線

    延時開關(guān)和手動開關(guān)是兩種不同類型的開關(guān),它們的工作原理和接線方式也有所不同。在某些情況下,我們可能需要將延時開關(guān)改為手動開關(guān),以滿足特定的使用需求。 一、延時開關(guān)和手動開關(guān)的區(qū)別 工作
    的頭像 發(fā)表于 08-19 15:49 ?620次閱讀

    延時開關(guān)怎么調(diào)時間長短

    延時開關(guān)是一種常見的電子控制設(shè)備,廣泛應(yīng)用于各種場合,如照明、空調(diào)、風(fēng)扇等。它可以根據(jù)用戶的需求,設(shè)定一定的延時時間,實現(xiàn)自動控制。 一、延時開關(guān)的工作原理 延時開關(guān)的基本組成
    的頭像 發(fā)表于 08-19 15:46 ?1551次閱讀

    延時開關(guān)上l和a是什么意思

    延時開關(guān)是一種常見的電子控制元件,廣泛應(yīng)用于各種電子設(shè)備和系統(tǒng)。它可以實現(xiàn)對電路的自動控制,使電路在一定的延時后自動接通或斷開。在延時開關(guān)的標識
    的頭像 發(fā)表于 08-19 15:45 ?5552次閱讀

    揭秘:單片機硬件與軟件延時之大不同!

    在嵌入式項目中,軟件開發(fā)基本上都會使用到延時,那么,該用軟件延時還是硬件延時?它們又有什么區(qū)別呢?今天就來講講關(guān)于硬件延時和軟件
    的頭像 發(fā)表于 07-25 08:11 ?828次閱讀
    揭秘:單片機硬件與軟件<b class='flag-5'>延時</b>之大不同!

    斷電延時繼電器的實際應(yīng)用

    斷電延時繼電器作為一種常見的電器設(shè)備,在現(xiàn)代生活中有著廣泛的應(yīng)用。它通過控制電路的開關(guān)時間來實現(xiàn)電器設(shè)備的延時關(guān)閉,從而達到省電、安全等目的。以下將結(jié)合多個應(yīng)用實例,詳細闡述斷電延時繼電器的實際應(yīng)用。
    的頭像 發(fā)表于 07-17 16:51 ?947次閱讀

    如何確定時間繼電器的延時范圍

    時間繼電器,作為電氣控制系統(tǒng)不可或缺的一部分,其延時功能對于系統(tǒng)的穩(wěn)定運行和精確控制起著至關(guān)重要的作用。延時范圍的確定不僅影響著系統(tǒng)的響應(yīng)速度和準確性,還關(guān)系到整個系統(tǒng)的安全性和可靠性。因此,本文
    的頭像 發(fā)表于 06-29 14:24 ?623次閱讀

    延時繼電器工作原理及應(yīng)用實例

    延時繼電器是一種電氣控制元件,它能夠在接收到啟動信號后,并非立即執(zhí)行動作(如閉合或斷開觸點),而是在經(jīng)過預(yù)設(shè)的時間延遲后才執(zhí)行相應(yīng)操作。延時繼電器廣泛應(yīng)用于各類自動控制系統(tǒng)和保護系統(tǒng),實現(xiàn)時間控制
    的頭像 發(fā)表于 06-23 11:54 ?2634次閱讀

    延時繼電器與時間繼電器的區(qū)別

    在電氣控制系統(tǒng)延時繼電器和時間繼電器都是重要的電氣元件,它們各自具有獨特的功能和應(yīng)用場景。然而,由于它們在名稱和功能上存在一定的相似性,導(dǎo)致許多人在實際應(yīng)用容易混淆。本文將對延時
    的頭像 發(fā)表于 05-24 16:27 ?1224次閱讀

    延時保險絲的工作原理 延時保險絲和普通保險絲的區(qū)別

    延時保險絲的工作原理 延時保險絲和普通保險絲的區(qū)別? 延時保險絲是一種常見的電子元件,廣泛應(yīng)用于各種電子設(shè)備。它的主要作用是在電流突然超過
    的頭像 發(fā)表于 03-05 17:06 ?5387次閱讀

    時間繼電器通電延時與斷電延時區(qū)別

    時間繼電器通電延時與斷電延時區(qū)別? 時間繼電器是一種常用的控制設(shè)備,可用于各種延時應(yīng)用。常見的時間繼電器主要包括通電延時繼電器和斷電
    的頭像 發(fā)表于 02-04 13:43 ?4597次閱讀

    延時繼電器工作原理 延時繼電器的接法和用途

    延時繼電器是一種常用的電子設(shè)備,它能夠延遲觸發(fā)繼電器的動作,從而在電路中產(chǎn)生一定的延時效果。它在工業(yè)自動化控制、電氣設(shè)備保護、通信系統(tǒng)和家庭電器控制等領(lǐng)域中廣泛應(yīng)用。 一、延時繼電器的工作原理
    的頭像 發(fā)表于 01-19 11:24 ?7237次閱讀

    延時繼電器工作原理 斷電延時繼電器原理

    延時繼電器工作原理 斷電延時繼電器原理? 延時繼電器是一種常用的電器元件,可用于各種電路控制和自動化控制系統(tǒng)。它在電路的作用是在斷電之后
    的頭像 發(fā)表于 12-26 15:26 ?2857次閱讀
    RM新时代网站-首页