一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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計時不是很準(zhǔn)確。app_timer庫可以創(chuàng)建幾十甚至上百個app timer,每次start或者stop這些timer,都會對其他timer計時精度產(chǎn)生一些影響。而且app_timer的中斷優(yōu)先級也不高,所以timeout handler經(jīng)常會被推遲執(zhí)行。

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

用法說明

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

修改app_timer默認(rèn)配置參數(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。當(dāng)一個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

    文章

    1077

    瀏覽量

    49114
  • Nordic
    +關(guān)注

    關(guān)注

    9

    文章

    211

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    如何調(diào)試nRF5 SDK

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

    淺談光模塊使用可能遇到的問題以及注意事項

    模塊作為光通信系統(tǒng)中的核心組件,廣泛應(yīng)用于數(shù)據(jù)中心、基站傳輸?shù)葓鼍?。其性能直接影響網(wǎng)絡(luò)傳輸質(zhì)量,但在實際使用中常因操作不當(dāng)或環(huán)境因素導(dǎo)致故障。本文梳理光模塊常見問題及使用規(guī)范,幫助用戶規(guī)避
    的頭像 發(fā)表于 05-15 09:55 ?277次閱讀

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

    模塊是你最好的選擇。FDS采用文件和記錄方式來組織Flash數(shù)據(jù),也就是說,真正的數(shù)據(jù)是放在一條記錄中,而多條記錄組成一個文件。根據(jù)應(yīng)用的需要,整個系統(tǒng)可以只有一個文件,也可以包含多個文件。文件采用文件ID來標(biāo)示,文件ID為2個字節(jié)(注:不能取值為0xFFFF)。一個文件下面可以放一條記錄,
    的頭像 發(fā)表于 05-12 15:59 ?478次閱讀
    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和藍(lán)牙空中升級

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

    如何調(diào)試nRF5 SDK

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

    deepin 25系統(tǒng)安裝常見問題

    隨著 deepin 25 系列版本的發(fā)布,我們特別推出 deepin Q&A 常見問題指南,旨在幫助您輕松應(yīng)對安裝、升級及使用過程中可能遇到的常見問題
    的頭像 發(fā)表于 04-14 14:08 ?1789次閱讀
    deepin 25系統(tǒng)安裝<b class='flag-5'>常見問題</b>

    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 ?298次閱讀
    關(guān)于功率<b class='flag-5'>模塊</b>冷卻的六個<b class='flag-5'>常見問題</b>

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

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

    40G光模塊介紹及常見問題探討

    模塊廠家提供40G光模塊,應(yīng)用于數(shù)據(jù)中心,云計算,高性能計算場景,廣泛兼容華為,華三,思科,銳捷等光纖模塊品牌,助您實現(xiàn)高速數(shù)據(jù)傳輸。本文介紹40G光模塊接口,光
    的頭像 發(fā)表于 11-25 11:56 ?882次閱讀

    鴻蒙Flutter實戰(zhàn):10-常見問題集合

    ~/.zshrc 或重啟命令行程序,甚至重啟 IDE/系統(tǒng),直至變量生效。 參考資料 Flutter SDK 倉庫-常見問題
    發(fā)表于 10-23 17:05

    UCD90xxx系列常見問題和解答

    電子發(fā)燒友網(wǎng)站提供《UCD90xxx系列常見問題和解答.pdf》資料免費下載
    發(fā)表于 10-15 11:29 ?0次下載
    UCD90xxx<b class='flag-5'>系列</b><b class='flag-5'>常見問題</b>和解答

    單片機WiFi模塊怎樣連接手機APP

    將單片機WiFi模塊連接到手機APP通常涉及以下幾個步驟: 選擇單片機和WiFi模塊 :選擇合適的單片機(如Arduino, ESP32等)和WiFi模塊(如ESP8266, ESP3
    的頭像 發(fā)表于 09-10 15:31 ?3627次閱讀