91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

定時模塊app_timer用法及常見問題—nRF5 SDK模塊系列二

jf_14701710 ? 來源:jf_14701710 ? 作者:jf_14701710 ? 2025-05-12 16:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

app_timer是大家經(jīng)常用到的一個庫,app_timer的功能就是定時,也就是說,你在某一時刻啟動一個app timer并設(shè)定超時時間,超時時間一到,app_timer就會回調(diào)timeout handler,然后執(zhí)行你需要的工作。使用app_timer時有如下幾點需要注意:

app_timer底層使用的是RTC1,而不是timer1/2/3/4,所以app_timer的功耗非常低:0.1uA左右。

app_timer計時精度為1ms,也就是說,app_timer只能計時毫秒的倍數(shù),如果你的計時精度小于1ms,請使用傳統(tǒng)timer1/2/3/4來做。

app_timer計時不是很準確。app_timer庫可以創(chuàng)建幾十甚至上百個app timer,每次start或者stop這些timer,都會對其他timer計時精度產(chǎn)生一些影響。而且app_timer的中斷優(yōu)先級也不高,所以timeout handler經(jīng)常會被推遲執(zhí)行。

啟動或者停止app_timer都是異步的,也就是說,當調(diào)用app_timer_start或者app_timer_stop時,系統(tǒng)只是把start或者stop操作入隊,然后觸發(fā)一個軟中斷,如果此時上下文環(huán)境的中斷優(yōu)先級高于軟中斷,那么只有等退出了當前上下文環(huán)境后才會真正去執(zhí)行軟中斷handler然后啟動或者停止timer,這也是為什么app_timer模塊需要一個operation queue,并通過APP_TIMER_CONFIG_OP_QUEUE_SIZE來配置其大?。蝗绻藭r上下文環(huán)境的優(yōu)先級低于軟中斷,那么立即觸發(fā)軟中斷handler并啟動或者停止timer。

用法說明

一般按照如下步驟使用app_timer:

修改app_timer默認配置參數(shù),如下:

wKgZO2ghrbCARrzpAAG2gMbkbPs301.png

創(chuàng)建app_timer。創(chuàng)建app timer時,先定義一個timer ID,用來表示這個timer,然后選擇app timer模式:single shot或者repeated。Single shot模式app timer只運行一次,timeout后執(zhí)行timeout handler然后自動停止app timer。Repeated模式app timer自動循環(huán)執(zhí)行,每次timeout后執(zhí)行timeout handler,然后繼續(xù)計時,直到下一個timeout然后再次執(zhí)行timeout handler,如此循環(huán)往復(fù)。創(chuàng)建app timer的時候,還需要定義timeout handler。

APP_TIMER_DEF(my_timer_id);   //定義timer ID

err_code = app_timer_create(&my_timer_id, APP_TIMER_MODE_REPEATED, my_timeout_handler)

static void my_timeout_handler (void * p_context)

{

       //add your code here

}

啟動app_timer或者停止app_timer。前面也提及過,啟動或者停止timer是異步的,所以我們有一個operation queue來存放start或者stop操作。真正的start或者stop操作是通過軟中斷0來實現(xiàn)的。

err_code = app_timer_start(my_timer_id, APP_TIMER_TICKS(10), NULL);  //啟動timer并定時10ms

err_code = app_timer_stop(my_timer_id);

常見使用問題

目前看到的常見使用問題有:

沒有按照使用說明來使用app_timer,比如定義app timer ID的時候不使用宏APP_TIMER_DEF,超時時間不使用宏APP_TIMER_TICKS來計算。

多次重復(fù)調(diào)用同一個app_timer_create。app_timer_create用于創(chuàng)建一個timer,多次調(diào)用同一個app_timer_create,會讓系統(tǒng)產(chǎn)生多個相同ID的app timer,以致于系統(tǒng)出現(xiàn)不可知的行為。

Stop沒有start的timer。當一個timer沒有通過app_timer_start啟動時,使用app_timer_stop停止它時,或者使用app_timer_stop停止一個不存在的timer時,會打亂app timer的正常行為,產(chǎn)生不可預(yù)測的結(jié)果。

Operation queue溢出。這個需要具體問題具體分析,有時候operation queue溢出不一定是因為queue size設(shè)置太小導(dǎo)致的,而是系統(tǒng)某個地方,確切說某個中斷例程,執(zhí)行時間太久,導(dǎo)致start和stop操作積累太多,從而產(chǎn)生queue溢出,這個時候就必須找出這個中斷例程執(zhí)行時間太久的原因,才能從根本上解決這個問題。

沒有初始化app_scheduler,而直接使用app_timer的schedule模式。app_scheduler原理及使用說明見:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Flib_scheduler.html&cp=5_1_3_38,概括來說,app_scheduler的作用就是把長長的中斷代碼從中斷函數(shù)轉(zhuǎn)到main線程中來執(zhí)行。


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1101

    瀏覽量

    51756
  • Nordic
    +關(guān)注

    關(guān)注

    9

    文章

    257

    瀏覽量

    49038
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    針對雙bank和單bank的使用方法建議

    NRF_DFU_FORCE_DUAL_BANK_APP_UPDATES 禁止 single?bank(更安全)。[nRF5 DFU 配置] 2. nRF Connect SDK +
    發(fā)表于 02-12 10:24

    深度技術(shù)解析nRF Connect SDK裸機選項方案

    。 nRF Connect SDK的裸機選項基于經(jīng)過市場驗證的SoftDevice,這是預(yù)構(gòu)建的低功耗藍牙協(xié)議堆棧,該協(xié)議堆棧為大多數(shù)nRF5 SDK用戶所熟悉,并由nrfx提供獨立于
    發(fā)表于 10-31 23:11

    使用nRF52840芯片的USB Host 功能參考例程

    Host 示例 Nordic 的 nRF5 SDK(或 nRF Connect SDK,取決于你使用的開發(fā)框架)中包含專門的 USB Host 示例,路徑通常如下:
    發(fā)表于 10-31 12:47

    深度技術(shù)解析低功耗藍牙廠商nordic的nRF Connect SDK裸機選項方案

    : 基于nRF54L系列的裸機選項低功耗藍牙開發(fā) SoftDevice S115 僅支持外設(shè)角色,最多支持2個連接 與最新nRF5 SDK SoftDevice (v17)采用相同AP
    發(fā)表于 10-29 21:17

    nRF Connect SDK Basic

    用戶在使用 nRF connect SDK 的時候經(jīng)常會操作的外設(shè)有GPIO,I2C,SPI,UART。我們就以 nRF connect SDK 2.7.0 中的例程代碼
    的頭像 發(fā)表于 08-20 10:41 ?834次閱讀
    <b class='flag-5'>nRF</b> Connect <b class='flag-5'>SDK</b> Basic

    Nordic nRF5 SDK和softdevice介紹

    里?Softdevice幫助文檔在哪里?如何選擇某個SDK例子 (example) 以開始我們的BLE開發(fā)之旅?本文將對以上問題進行解答。 Nordic目前有2套完全獨立的SDKnRF5 S
    的頭像 發(fā)表于 08-20 09:54 ?3109次閱讀
    Nordic <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>和softdevice介紹

    如何調(diào)試nRF5 SDK

    本文將講述Nordic nRF5 SDK的主要調(diào)試手段,以幫助大家快速定位問題,并解決問題。一般來說,你可以通過打log方式,IDE的debug模式,SDK自帶的app_error_c
    的頭像 發(fā)表于 06-24 08:59 ?1019次閱讀
    如何調(diào)試<b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>

    nRF5 SDK軟件架構(gòu)及softdevice工作原理

    SDK,建議先看一下這篇文章“Nordic nRF5 SDK和softdevice介紹”,以建立Nordic nRF5 SDK的一些基本知
    的頭像 發(fā)表于 06-23 11:08 ?706次閱讀
    <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>軟件架構(gòu)及softdevice工作原理

    Nordic nRF51/nRF52開發(fā)流程說明

    51422/nRF51802等芯片,開發(fā)者可以按照如下流程去評估和開發(fā)nRF52/51應(yīng)用解決方案。 如果你英文比較好的話,建議直接閱讀Nordic官方的“nRF5 Getting Started”:https
    的頭像 發(fā)表于 06-17 14:25 ?1518次閱讀
    Nordic <b class='flag-5'>nRF</b>51/<b class='flag-5'>nRF</b>52開發(fā)流程說明

    Flash訪問模塊FDS用法常見問題nRF5 SDK模塊系列

    模塊是你最好的選擇。FDS采用文件和記錄方式來組織Flash數(shù)據(jù),也就是說,真正的數(shù)據(jù)是放在一條記錄中,而多條記錄組成一個文件。根據(jù)應(yīng)用的需要,整個系統(tǒng)可以只有一個文件,也可以包含多個文件。文件采用文件ID來標示,文件ID為2個字節(jié)(注:不能取值為0xFFFF)。一個文件下面可以放一條記錄,
    的頭像 發(fā)表于 05-12 15:59 ?1769次閱讀
    Flash訪問<b class='flag-5'>模塊</b>FDS<b class='flag-5'>用法</b>及<b class='flag-5'>常見問題</b>—<b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b><b class='flag-5'>模塊</b><b class='flag-5'>系列</b>一

    nRF Connect SDK(NCS)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    編碼如何解讀?NCS可不可以進行單bank升級?可不可以把一個nRF5 SDK應(yīng)用升級到NCS應(yīng)用?MCUboot拷貝操作中的swap和overwrite有什么區(qū)別?為什么說MCUboot升級永遠都不
    的頭像 發(fā)表于 05-09 14:14 ?3607次閱讀
    <b class='flag-5'>nRF</b> Connect <b class='flag-5'>SDK</b>(NCS)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    如何調(diào)試nRF5 SDK

    本文將講述Nordic nRF5 SDK的主要調(diào)試手段,以幫助大家快速定位問題,并解決問題。一般來說,你可以通過打log方式,IDE的debug模式,SDK自帶的app_error_c
    發(fā)表于 04-26 23:13

    STM32定時器基本原理及常見問題之培訓(xùn)資料

    STM32 定時器基本原理及常見問題之培訓(xùn)資料v3.10 時基單元、捕捉比較功能、主從觸發(fā)與級聯(lián)、案例分享 培訓(xùn)內(nèi)容:
    發(fā)表于 04-08 16:26

    關(guān)于功率模塊冷卻的六個常見問題

    的壽命并使其發(fā)揮最佳性能。本文章將概述在為應(yīng)用設(shè)計功率模塊時可能出現(xiàn)的關(guān)于功率模塊冷卻的六個常見問題。1.器件溫度是否均勻?功率晶體管和極管等功率元器件會產(chǎn)生局部熱
    的頭像 發(fā)表于 04-08 11:42 ?771次閱讀
    關(guān)于功率<b class='flag-5'>模塊</b>冷卻的六個<b class='flag-5'>常見問題</b>

    藍牙模塊PTR5618性能、開發(fā)與應(yīng)用解析

    J-Link驅(qū)動?。 優(yōu)先選擇Nordic官方SDKnRF5 SDK)進行底層開發(fā)?。 ?六、互動討論? ?話題:你在PTR5618開發(fā)中遇到過哪些挑戰(zhàn)?歡迎分享優(yōu)化方案或替代型號推薦!? ?聲明:? 本文
    發(fā)表于 03-12 14:32