日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

freertos 定时器 不启动_FreeRTOS 从入门到精通8--软件定时器应用

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 freertos 定时器 不启动_FreeRTOS 从入门到精通8--软件定时器应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一講

奔騰的心:FreeRTOS 從入門到精通7--隊列管理?zhuanlan.zhihu.com

我們介紹了隊列管理的相關知識,在這一章中我們將探討FreeRTOS的另一個特性--軟件定時器(Software Timer)的概念和應用。

什么是軟件定時器

如果一個任務要在未來某個時間運行或者周期性地運行以實現定時或者延時控制,就需要設定一個定時器。定時器分為硬件定時器和軟件定時器。硬件定時器是單片機內部的特殊功能模塊,通過硬件定時器中斷就可以精準地對任務的運行時間進行控制。但是單片機的硬件資源通常有限,而且不同種類單片機的定時中斷的代碼是不同的,對程序代碼的兼容性易用性提出很高的難度。相對而言,軟件定時器是基于系統時鐘中斷且由軟件來模擬的定時器,當經過設定的Tick 時鐘計數值后會觸發用戶定義的回調函數。軟件定時器不占用單片機寶貴的硬件資源和CPU資源。FreeRTOS提供了完善的軟件定時器的支持,為了啟用軟件定時器,需要在頭文件FreeRTOSConfig.h中設置configUSE_TIMERS的值為1.

軟件定時器需要定時或者延時控制的函數稱為回調函數。函數的原型如下:

void

函數的返回值是空類型,xTimer的參數是軟件定時器的具柄。回調函數的注意事項是代碼應該盡可能地簡短緊湊,并且避免調用FreeRTOS的API函數防止進入阻塞狀態。

軟件定時器的類型和狀態

軟件定時器在FreeRTOS中分為兩個類型

  • 一次性定時器(One-shot timer)
  • 自動重載定時器(Auto-reload timer)

一次性定時器啟動后只會執行一次回掉函數;自動重載定時器會周期性地執行回調函數。

軟件定時器的狀態有以下兩種

  • 靜止裝態(Dormant)
  • 運行狀態(Running)

處于靜止裝態的定時器不會執行回調函數,可以通過調用定時器的具柄啟用;處于運行狀態的定時器會在設定的時間間隔(相對于定時器進入運行狀態后)到達后調用回調函數。一次性定時器會在執行回調函數后進入靜止狀態,而自動重載定時器會在執行回調函數后重新進入運行狀態。通過調用軟件定時器相關的系統API函數可以在兩種狀態之間進行切換,其中兩種定時器的狀態轉換圖如下:

自動重載定時器的狀態轉換圖

一次性定時器的狀態轉換圖

軟件定時器的實質

軟件定時器由一個系統內核調度器自動生成的時間服務任務管理。這個時間服務任務的優先級和棧大小由頭文件FreeRTOSConfig.h中configTIMER_TASK_PRIORITY和configTIMER_TASK_STACK_DEPTH屬性相應設定。定時器的回調函數調用FreeRTOS的API函數的話會導致時間服務任務管理進入阻塞狀態,這種情況是要避免的。

針對軟件定時器的命令如啟動定時器,停止定時器和重置定時器等會通過命令隊列發送到時間服務任務。隊列長度由頭文件FreeRTOSConfig.h中configTIMER_QUEUE_LENGTH 值設定。

定時器相關API函數

TimerHandle_t

xTimerCreate()函數用于創建定時器

函數參數含義如下

  • pcTimerName 定時器的名稱,用于調試用
  • xTimerPeriodInTicks 定時器的周期,dMS_TO_TICKS() 可把時間轉成節拍數
  • uxAutoReload 設置為pdTRUE為 自動重載定時器,設置為pdFALSE為一次性定時器
  • pvTimerID 定時器的ID,可以用于各種目的
  • pxCallbackFunction 定時器執行的回調函數
  • 返回值 返回值為NULL表示創建失敗,非NULL表示創建成功
BaseType_t

xTimerStart()函數用于啟動定時器

函數參數含義如下

  • xTimer 要執行定時器的具柄
  • xTicksToWait 如果命令隊列為滿時函數進入阻塞狀態等待命令隊列有空的時間
  • 返回值 返回值為pdPASS表示啟動定時器成功;返回值為pdFALSE表示失敗
void

vTimerSetTimerID()用于設置定時器的pvTimerID 屬性

函數參數含義如下

  • xTimer 要執行定時器的具柄
  • pvNewID 設定的pvTimerID的值
void

pvTimerGetTimerID()函數用于獲取定時器的pvTimerID 屬性

函數參數含義如下

  • xTimer 要執行定時器的具柄
  • 返回值 pvTimerID的值
BaseType_t

xTimerChangePeriod函數用于改變定時器的運行周期

函數參數含義如下

  • xTimer 要執行定時器的具柄
  • xNewTimerPeriodInTicks 新的定時器的周期,dMS_TO_TICKS() 可把時間轉成節拍數
  • xTicksToWait 如果命令隊列為滿時函數進入阻塞狀態等待命令隊列有空的時間
  • 返回值 返回值為pdPASS表示成功;返回值為pdFALSE表示失敗
BaseType_t

xTimerReset()函數用于重置定時器,定時器會重新運行并以此計算新的時間間隔

函數參數含義如下

  • xTimer 要執行定時器的具柄
  • xTicksToWait 如果命令隊列為滿時函數進入阻塞狀態等待命令隊列有空的時間
  • 返回值 返回值為pdPASS表示成功;返回值為pdFALSE表示失敗

這一章我們講了軟件定時器的應用,偏重于理論這一塊,在下一章我們講介紹中斷管理。

奔騰的心:FreeRTOS 從入門到精通9--中斷管理?zhuanlan.zhihu.com

總結

以上是生活随笔為你收集整理的freertos 定时器 不启动_FreeRTOS 从入门到精通8--软件定时器应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。