1- 簡介
1.1 軟件定時器簡述
軟件定時器就是允許函數(shù)設(shè)置一定的等待時間,然后執(zhí)行。定時器執(zhí)行的函數(shù)被稱為定時器的回調(diào)函數(shù)。定時器從啟動到執(zhí)行回調(diào)函數(shù)之間的時間稱為定時器的周期。定時器的回調(diào)函數(shù)在定時器的時間到達(dá)時執(zhí)行。
軟件定時器要先創(chuàng)建才能使用。
1.2 軟件定時器有效的實(shí)現(xiàn)
軟件定時器功能的實(shí)現(xiàn)是非常容易的,但是想要有效的實(shí)現(xiàn)可能會優(yōu)點(diǎn)困難,FreeRTOS的定時器,不會從中斷中執(zhí)行定時器的回調(diào)函數(shù),除非定時器到達(dá)了,否則不會消耗任何的運(yùn)算時間,不會像時鐘中添加任何的運(yùn)算負(fù)擔(dān),如果中斷禁用了,也不會遍歷任何的鏈表結(jié)構(gòu)。
定時器服務(wù)任務(wù)主要利用了FreeRTOS的一些特性,允許像應(yīng)用程序添加定時器功能,而對于應(yīng)用程序可執(zhí)行的程序影響最小。
1.3 有關(guān)定時器的回調(diào)函數(shù)
定時器回調(diào)函數(shù)在定時器服務(wù)任務(wù)中進(jìn)行執(zhí)行,所以定時器回調(diào)函數(shù)不要試圖阻塞。比如,定時器回調(diào)函數(shù)在訪問隊(duì)列或信號量時不能調(diào)用vTaskDelay()、vTaskDelayUntil()或指定非零阻塞時間。
2- 定時器服務(wù)和定時器命令隊(duì)列
計(jì)時器功能是可選的,不是FreeRTOS核心內(nèi)核的一部分。相反,它是由定時器服務(wù)任務(wù)提供的。
FreeRTOS提供了一組與定時器相關(guān)的API函數(shù)。其中許多函數(shù)使用標(biāo)準(zhǔn)的FreeRTOS隊(duì)列向計(jì)時器服務(wù)任務(wù)發(fā)送命令。用于此目的的隊(duì)列稱為timer command queue。timer command queue是FreeRTOS定時器實(shí)現(xiàn)的私有命令,不能直接訪問。
下圖演示了這種情況。左邊的代碼表示一個函數(shù),它是用戶應(yīng)用程序的一部分,并從作為同一用戶應(yīng)用程序的一部分創(chuàng)建的任務(wù)中調(diào)用。右邊的代碼表示定時器服務(wù)任務(wù)的實(shí)現(xiàn)。定時器命令隊(duì)列是連接應(yīng)用任務(wù)和定時器服務(wù)任務(wù)的紐帶。在本例中,從應(yīng)用程序代碼調(diào)用xTimerReset() API函數(shù)。這導(dǎo)致將重置命令發(fā)送到定時器命令隊(duì)列,由定時器服務(wù)任務(wù)處理。應(yīng)用程序代碼只調(diào)用xTimerReset() API函數(shù)——它沒有(也不能)直接訪問定時器命令隊(duì)列。
3-軟件定時器程序配置
要使FreeRTOS 軟件計(jì)時器 API在應(yīng)用程序中可用,只需:
將 FreeRTOS/Source/timers.c 源文件添加到您的項(xiàng)目中,以及在應(yīng)用程序 FreeRTOSConfig.h 頭文件中定義。下面這個表是一些常量:
4- 自動沖加載
定時器有兩種類型:單觸發(fā)定時器和自動重新加載定時器。一旦啟動,單觸發(fā)定時器只會執(zhí)行它的回調(diào)函數(shù)一次。它可以手動重新啟動,但不能自動重新啟動。相反,自動重新加載定時器一旦啟動,在每次執(zhí)行回調(diào)函數(shù)后都會自動重新啟動,導(dǎo)致周期性的回調(diào)執(zhí)行。
下圖演示了,單觸發(fā)定時器和自動重載之間的區(qū)別,在此圖中,定時器1為周期等于100的單次定時器,計(jì)時器2是自動重加載周期等于200次的定時器。
5-定時器的重置
重新設(shè)置已經(jīng)開始運(yùn)行的定時器。重置定時器會導(dǎo)致定時器重新計(jì)算其達(dá)到的時間,這種行為在下面的圖中得到了展示,其中定時器1是一個周期為5秒的單觸發(fā)定時器。
-
軟件定時器
+關(guān)注
關(guān)注
0文章
18瀏覽量
6798 -
定時器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115371 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62396 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11622
發(fā)布評論請先 登錄
相關(guān)推薦
定時器中斷簡介
最簡單的滴答定時器程序簡介
stm32定時器中斷程序
μC/OS-II的軟件定時器的改進(jìn)的方法
![μC/OS-II的<b class='flag-5'>軟件</b><b class='flag-5'>定時器</b>的改進(jìn)的方法](https://file.elecfans.com/web2/M00/49/3E/poYBAGKhwJOAXEHUAAA609uGB_s563.png)
555定時器應(yīng)用設(shè)計(jì)軟件免費(fèi)下載
![555<b class='flag-5'>定時器</b>應(yīng)用設(shè)計(jì)<b class='flag-5'>軟件</b>免費(fèi)下載](https://file.elecfans.com/web1/M00/7E/A0/pIYBAFwW_FOAIHdKAAFuWlL6oaQ306.png)
設(shè)計(jì)軟件定時器
![設(shè)計(jì)<b class='flag-5'>軟件</b><b class='flag-5'>定時器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32 之 ESP-IDF 教學(xué)(三)——通用硬件定時器(Timer)
![ESP32 之 ESP-IDF 教學(xué)(三)——通用硬件<b class='flag-5'>定時器</b>(Timer)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機(jī)軟件定時器的實(shí)現(xiàn)方法
![單片機(jī)<b class='flag-5'>軟件</b><b class='flag-5'>定時器</b>的實(shí)現(xiàn)方法](https://file.elecfans.com/web2/M00/8A/FC/poYBAGPGSnaAPIXkAACfiF8jySY229.png)
評論