nordic 51822 sdk. timer 的使用
它的源代碼和頭文件分別為app_timer.c/app_timer.h。這是Nordic為我們提供的虛擬定時器,這個定時器不同于硬件上的TIMER,而是基于RTC1實現的一種虛擬定時器,其將定時功能作為了一個資源進行管理,所以會有初始化、創建等過程。
? ??nrf51822的SDK采用封裝思想,需要暴露給用戶的信息都在相關模塊的頭文件中;為了提醒用戶不去看具體實現細節,我們可以發現相關的API,比如app_timer_create()的源碼部分都是沒有接口描述信息的,相關使用方法需要看app_timer.h或者翻閱SDK目錄下的Documentation index.html。
1、參數宏APP_TIMER_INIT()
這個宏用于初始化app_timer模塊,這是一個參數宏,接口定義如下:
APP_TIMER_INIT(PRESCALER, MAX_TIMERS, OP_QUEUES_SIZE, USE_SCHEDULER)
其中PRESCALE? ???分頻比例,填入0的話,每秒就產生32768次tick,定時最大長度為0xFFFFFF次tick,也就是說500多秒定時。
? ?與ucos提供的時基tick不同,本SDK的主要在定時到達的時候進入RTC中斷,而不是每個TICK都進入。因此就算每秒就產生32768次tick,也不會拖慢系統性能。
MAX_TIMERS? ?? ? 必須大于等于工程中創建的timer數量。
OP_QUEUES_SIZE? ?操作隊列的大小,具體意思看第三節。如果不作死,選擇等于MAX_TIMERS就行了。
USE_SCHEDULER? ? 是否使用任務調度器,當前不使用
2、參數宏APP_TIMER_TICKS()
這個宏用于計算特定毫秒數相當于多少個tick。接口定義如下:
APP_TIMER_TICKS(MS, PRESCALER)
其中MS是單位為毫秒的定時時間,PRESCALER是分頻比例。
3、函數app_timer_create()
用于創建一個timer,并獲取生成timer的控制句柄。接口定義如下:
uint32_t app_timer_create(app_timer_id_t *? ?? ?? ?? ?p_timer_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?app_timer_mode_t? ?? ?? ?? ?mode,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? app_timer_timeout_handler_t timeout_handler)
p_timer_id ? 讀取到創建的timer的句柄
mode ? ? ? ? ? timer的類型,其中
? ? ? ? ? ? ? ? ? ? APP_TIMER_MODE_SINGLE_SHOT是單次執行
? ? ? ? ? ? ? ? ? ? APP_TIMER_MODE_REPEATED是循環執行
timeout_handler? ? 被注冊到內核的回調函數,當timer超時后就會執行。
4、函數app_timer_start()
設置一個timer的定時間隔和上下文參數,并啟動這個timer。接口定義如下:
uint32_t app_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void * p_context)
timer_id? ?? ?? ???app_timer_create()里創建的timer句柄
timeout_ticks? ?? ? 定時的tick數量,一般用APP_TIMER_TICKS()計算。
p_context? ?? ?? ? 傳遞給超時回調函數的參數,不能指向局部的自動變量。
5、app_timer_stop()
停止一個timer的運行。接口定義如下:
uint32_t app_timer_stop(app_timer_id_t timer_id)
timer_id? ?? ?? ???app_timer_create()里創建的timer句柄
使用流程:
?app_timer_create();---->?app_timer_start() ; ------->服務函數代碼 -------->app_timer_stop()
先初始化將Timer創建 ? ? ? ? 開始Timer使之計時 ? ? ? ? ?計時到后執行對應服務函數 ? ? ? ? ? ? ? ? ? ? 計時停止結束
如果是APP_TIMER_MODE_SINGLE_SHOT單次執行 ,那么服務函數執行一次后就結束了,當然了可以在服務函數中再次app_timer_start() 使之再次執行一次,當然也可再次執行N次,以便靈活使用
如果是APP_TIMER_MODE_REPEATED循環執行,那么當app_timer_start()之后,時間到后會執行服務函數,計時再次重新開始,周而復始
---------------------
作者:FreeBelieve
來源:CSDN
原文:https://blog.csdn.net/AA0210AA/article/details/49760565
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
轉載于:https://www.cnblogs.com/jack-hzm/p/10179062.html
總結
以上是生活随笔為你收集整理的nordic 51822 sdk. timer 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洱海开车自驾环湖路线
- 下一篇: 加速世界作者是谁啊?