1- 簡(jiǎn)介
1.1 軟件定時(shí)器簡(jiǎn)述
軟件定時(shí)器就是允許函數(shù)設(shè)置一定的等待時(shí)間,然后執(zhí)行。定時(shí)器執(zhí)行的函數(shù)被稱為定時(shí)器的回調(diào)函數(shù)。定時(shí)器從啟動(dòng)到執(zhí)行回調(diào)函數(shù)之間的時(shí)間稱為定時(shí)器的周期。定時(shí)器的回調(diào)函數(shù)在定時(shí)器的時(shí)間到達(dá)時(shí)執(zhí)行。
軟件定時(shí)器要先創(chuàng)建才能使用。
1.2 軟件定時(shí)器有效的實(shí)現(xiàn)
軟件定時(shí)器功能的實(shí)現(xiàn)是非常容易的,但是想要有效的實(shí)現(xiàn)可能會(huì)優(yōu)點(diǎn)困難,FreeRTOS的定時(shí)器,不會(huì)從中斷中執(zhí)行定時(shí)器的回調(diào)函數(shù),除非定時(shí)器到達(dá)了,否則不會(huì)消耗任何的運(yùn)算時(shí)間,不會(huì)像時(shí)鐘中添加任何的運(yùn)算負(fù)擔(dān),如果中斷禁用了,也不會(huì)遍歷任何的鏈表結(jié)構(gòu)。
定時(shí)器服務(wù)任務(wù)主要利用了FreeRTOS的一些特性,允許像應(yīng)用程序添加定時(shí)器功能,而對(duì)于應(yīng)用程序可執(zhí)行的程序影響最小。
1.3 有關(guān)定時(shí)器的回調(diào)函數(shù)
定時(shí)器回調(diào)函數(shù)在定時(shí)器服務(wù)任務(wù)中進(jìn)行執(zhí)行,所以定時(shí)器回調(diào)函數(shù)不要試圖阻塞。比如,定時(shí)器回調(diào)函數(shù)在訪問(wèn)隊(duì)列或信號(hào)量時(shí)不能調(diào)用vTaskDelay()、vTaskDelayUntil()或指定非零阻塞時(shí)間。
2- 定時(shí)器服務(wù)和定時(shí)器命令隊(duì)列
計(jì)時(shí)器功能是可選的,不是FreeRTOS核心內(nèi)核的一部分。相反,它是由定時(shí)器服務(wù)任務(wù)提供的。
FreeRTOS提供了一組與定時(shí)器相關(guān)的API函數(shù)。其中許多函數(shù)使用標(biāo)準(zhǔn)的FreeRTOS隊(duì)列向計(jì)時(shí)器服務(wù)任務(wù)發(fā)送命令。用于此目的的隊(duì)列稱為timer command queue。timer command queue是FreeRTOS定時(shí)器實(shí)現(xiàn)的私有命令,不能直接訪問(wèn)。
下圖演示了這種情況。左邊的代碼表示一個(gè)函數(shù),它是用戶應(yīng)用程序的一部分,并從作為同一用戶應(yīng)用程序的一部分創(chuàng)建的任務(wù)中調(diào)用。右邊的代碼表示定時(shí)器服務(wù)任務(wù)的實(shí)現(xiàn)。定時(shí)器命令隊(duì)列是連接應(yīng)用任務(wù)和定時(shí)器服務(wù)任務(wù)的紐帶。在本例中,從應(yīng)用程序代碼調(diào)用xTimerReset() API函數(shù)。這導(dǎo)致將重置命令發(fā)送到定時(shí)器命令隊(duì)列,由定時(shí)器服務(wù)任務(wù)處理。應(yīng)用程序代碼只調(diào)用xTimerReset() API函數(shù)——它沒(méi)有(也不能)直接訪問(wèn)定時(shí)器命令隊(duì)列。
3-軟件定時(shí)器程序配置
要使FreeRTOS 軟件計(jì)時(shí)器 API在應(yīng)用程序中可用,只需:
將 FreeRTOS/Source/timers.c 源文件添加到您的項(xiàng)目中,以及在應(yīng)用程序 FreeRTOSConfig.h 頭文件中定義。下面這個(gè)表是一些常量:
4- 自動(dòng)沖加載
定時(shí)器有兩種類型:單觸發(fā)定時(shí)器和自動(dòng)重新加載定時(shí)器。一旦啟動(dòng),單觸發(fā)定時(shí)器只會(huì)執(zhí)行它的回調(diào)函數(shù)一次。它可以手動(dòng)重新啟動(dòng),但不能自動(dòng)重新啟動(dòng)。相反,自動(dòng)重新加載定時(shí)器一旦啟動(dòng),在每次執(zhí)行回調(diào)函數(shù)后都會(huì)自動(dòng)重新啟動(dòng),導(dǎo)致周期性的回調(diào)執(zhí)行。
下圖演示了,單觸發(fā)定時(shí)器和自動(dòng)重載之間的區(qū)別,在此圖中,定時(shí)器1為周期等于100的單次定時(shí)器,計(jì)時(shí)器2是自動(dòng)重加載周期等于200次的定時(shí)器。
5-定時(shí)器的重置
重新設(shè)置已經(jīng)開(kāi)始運(yùn)行的定時(shí)器。重置定時(shí)器會(huì)導(dǎo)致定時(shí)器重新計(jì)算其達(dá)到的時(shí)間,這種行為在下面的圖中得到了展示,其中定時(shí)器1是一個(gè)周期為5秒的單觸發(fā)定時(shí)器。
-
軟件定時(shí)器
+關(guān)注
關(guān)注
0文章
18瀏覽量
6941 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
118916 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
493瀏覽量
64338 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
88瀏覽量
11895
發(fā)布評(píng)論請(qǐng)先 登錄
基于STM32的軟件定時(shí)器設(shè)計(jì)

定時(shí)器中斷簡(jiǎn)介
最簡(jiǎn)單的滴答定時(shí)器程序簡(jiǎn)介
stm32定時(shí)器中斷程序
μC/OS-II的軟件定時(shí)器的改進(jìn)的方法

555定時(shí)器應(yīng)用設(shè)計(jì)軟件免費(fèi)下載

設(shè)計(jì)軟件定時(shí)器

stm32—定時(shí)器配置

基于硬件定時(shí)器的軟件定時(shí)器

ESP32 之 ESP-IDF 教學(xué)(三)——通用硬件定時(shí)器(Timer)

freeRTOS軟件定時(shí)器的使用
Free RTOS的軟件定時(shí)器

評(píng)論