FreeRTOS 軟定時器

FreeRTOS 軟定時器

軟定時器不需要硬件支持,完全由FreeRTOS內核控制。軟件定時器不會佔用任何處理時間除非調用。

配置

使用軟定時器需要進行如下配置:
在這裏插入圖片描述

回調函數 Software Timer Callback Functions

在這裏插入圖片描述
注意,回調函數不能包含可能造成阻塞態的任務,比如說延時函數!
當調用xQueueReceive()隊列接收函數時,需要將等待時間設置爲0!

屬性和狀態 Attributes and States of a Software Timer

定時器週期 Period of a Software Timer

單次/週期定時器 One-shot and Auto-reload Timers

  • One-shot
    開啓後,只能執行一次
  • Auto-reload
    開啓後,以週期重新加載計數值
    在這裏插入圖片描述

狀態 Software Timer States

  • Dormant
    句柄存在但是回調函數不可用
  • Running
    句柄存在且回調函數正常執行
    在這裏插入圖片描述

上下文 The Context of a Software Timer

The RTOS Daemon (Timer Service) Task

在調度器啓動後,系統會自動創建一些任務。比如說,Idle Task;
Daemon Task也是系統自動創建的任務,他負責軟定時器功能的實現。

軟定時器命令隊列 The Timer Command Queue

軟定時器API通過定時器命令隊列(timer command queue)從調用任務發指令給Daemon Task。這個隊列是自動創建的。隊列長度通過configTIMER_QUEUE_LENGTH設置。
在這裏插入圖片描述

Daemon 任務調度 Daemon Task Scheduling

Daemon task只處理命令或者時定時器回調函數,他以最高優先級運行。
在這裏插入圖片描述

創建和啓用定時器

xTimerCreate()

在這裏插入圖片描述
在這裏插入圖片描述

xTimerStart()

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

示例

在這裏插入圖片描述
在這裏插入圖片描述

定時器ID The Timer ID

當定時器創建時,會被分配一個初始ID,可以通過API進行修改。

vTimerSetTimerID() 設置定時器ID

在這裏插入圖片描述

pvTimerGetTimerID() 獲取ID

在這裏插入圖片描述
在這裏插入圖片描述

示例

在這裏插入圖片描述
在這裏插入圖片描述

改變定時器週期

xTimerChangePeriod()

用來改變已經創建的定時器的週期
比如說,LED運行狀態指示燈等
在這裏插入圖片描述

示例

在這裏插入圖片描述

重置定時器 Resetting a Software Timer

重置定時器就是重置其計數值,如圖
在這裏插入圖片描述

xTimerReset()

在這裏插入圖片描述

示例

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章