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

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

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

5個使用帶有中斷的回調(diào)的技巧

PCB線路板打樣 ? 來源:LONG ? 2019-08-09 09:18 ? 次閱讀

回調(diào)是對更高級別軟件傳遞到函數(shù)的可執(zhí)行代碼的引用。這些回調(diào)能夠極大地提高嵌入式軟件的可移植性和重用性,但是根據(jù)它們的定義,它們需要使用函數(shù)指針,如果不仔細(xì)使用,可能會非常危險。以下是在嵌入式系統(tǒng)中安全地創(chuàng)建和使用回調(diào)的五個技巧,特別是將它們與中斷一起使用。

技巧1 -創(chuàng)建集合或注冊方法- 回調(diào)是最常見的是將函數(shù)指針傳遞給函數(shù),但它們也可以在便攜式系統(tǒng)中用于設(shè)置將由中斷服務(wù)例程(ISR)調(diào)用的函數(shù)。當(dāng)中斷觸發(fā)時,中斷處理程序?qū)瑢?yīng)該執(zhí)行的函數(shù)的引用。為了以可重用的方式設(shè)置被調(diào)用的函數(shù),創(chuàng)建允許回調(diào)函數(shù)向模塊注冊的接口會很有幫助。創(chuàng)建寄存器或集合函數(shù)允許ISR處理程序是通用的,封裝的,甚至可以編譯為外設(shè)庫的一部分。中斷的可執(zhí)行函數(shù)將在運(yùn)行時設(shè)置。

技巧2 -將回調(diào)初始化為NULL或默認(rèn)- 創(chuàng)建包含回調(diào)寄存器或設(shè)置功能的外設(shè)驅(qū)動程序接口是創(chuàng)建可移植中斷的重要一步。但是有一個問題:如果回調(diào)永遠(yuǎn)不會被注冊但是中斷變?yōu)閱⒂萌缓笥|發(fā)會發(fā)生什么?中斷服務(wù)程序需要某種方式來判斷是否已注冊回調(diào)函數(shù)。提供此類驗(yàn)證的最簡單方法是首先將回調(diào)函數(shù)指針初始化為NULL。在ISR中對NULL進(jìn)行簡單檢查將阻止任何處理程序執(zhí)行。使用NULL的另一種方法是初始化指向通用和空中斷處理程序的指針。當(dāng)未初始化的中斷回調(diào)被觸發(fā)時,默認(rèn)處理程序?qū)⑦\(yùn)行。

技巧3 -使用前驗(yàn)證回調(diào)- 將回調(diào)指針的初始值設(shè)置為NULL或通用處理程序允許中斷驗(yàn)證中斷處理程序是組。但是,在使用函數(shù)指針時,首先要確認(rèn)內(nèi)存中引用的位置不是NULL并且確實(shí)存在于系統(tǒng)中是一個好主意。函數(shù)指針可能非常危險,在進(jìn)行調(diào)用之前應(yīng)注意確保指向的位置有效。

提示4 -使用回調(diào)向較低級別的固件添加功能- 回調(diào)函數(shù)對于在通用和應(yīng)用程序中向較低級別驅(qū)動程序和應(yīng)用程序代碼添加功能非常有用特定的方式。為了生成松散耦合且具有高內(nèi)聚性的固件,開發(fā)人員可以通過使用回調(diào)將中斷向量和對其他外圍模塊的引用傳遞到驅(qū)動程序中?;卣{(diào)允許開發(fā)人員在設(shè)計時添加特定于應(yīng)用程序的功能,而無需不斷修改驅(qū)動程序代碼以獲得所需的行為??梢酝ㄟ^這種方式使用回調(diào)來生成非常干凈,可移植且可重復(fù)使用的固件和接口。

提示5 -創(chuàng)建抽象回調(diào)函數(shù)- 回調(diào)函數(shù)通常需要采用參數(shù)數(shù)量未知,它們可能會也可能不會返回數(shù)據(jù),具體取決于應(yīng)用程序的需求。然而,開發(fā)人員的目標(biāo)是編寫抽象的回調(diào)函數(shù)。對于與中斷相關(guān)的回調(diào),其中回調(diào)只是作為中斷服務(wù)程序的一部分被調(diào)用,該函數(shù)可以獲取void參數(shù)并返回void。需要與應(yīng)用程序共享的任何數(shù)據(jù)都將以與中斷相同的方式處理。對于可能與錯誤處理或其他自定義功能相關(guān)的驅(qū)動程序的回調(diào),處理參數(shù)和返回值的最簡單方法是傳遞指針并返回指針。

最后的想法

回調(diào)可以在嵌入式系統(tǒng)中找到廣泛的用途,特別是在開發(fā)便攜式和可重復(fù)使用的固件時。本文提供了五個開發(fā)人員如何考慮和實(shí)現(xiàn)中斷回調(diào)的示例,但它們只是其中的一小部分。

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

    關(guān)注

    17

    文章

    2968

    瀏覽量

    21608
  • 華強(qiáng)PCB
    +關(guān)注

    關(guān)注

    8

    文章

    1831

    瀏覽量

    27682
  • 華強(qiáng)pcb線路板打樣

    關(guān)注

    5

    文章

    14629

    瀏覽量

    42903
收藏 人收藏

    評論

    相關(guān)推薦

    調(diào)函數(shù)小結(jié)

    調(diào) 作用: 方便層與層的隔離,方便系統(tǒng)功能的擴(kuò)展,比如編寫一比較函數(shù),通過調(diào)方法編寫,可以將應(yīng)用層的比較函數(shù)實(shí)現(xiàn)無限制類型的數(shù)據(jù)比較,
    發(fā)表于 07-05 01:51

    調(diào)函數(shù)和中斷處理函數(shù)的關(guān)系

    結(jié)論看完本文,大家可能對調(diào)函數(shù)和中斷處理函數(shù)的關(guān)系產(chǎn)生了疑問。其實(shí)是這樣的,單片機(jī)每完成接收一字符,就會進(jìn)入一次中斷處理函數(shù),而在
    發(fā)表于 08-13 08:34

    如何確定中斷調(diào)函數(shù)的函數(shù)名

    問題有通用的解法。下面以ADC1為例,來查找它的中斷調(diào)函數(shù)。首先打開CubeMX生成的代碼,找到所有中斷函數(shù)入口的C文件首先需要編譯一下
    發(fā)表于 12-06 06:21

    怎么才能在中斷調(diào)函數(shù)里用延時呢?

    中斷調(diào)函數(shù)里不可以用 rt_thread_mdelay,怎么才能在調(diào)函數(shù)里用延時呢?
    發(fā)表于 04-20 09:32

    怎樣去解決外部中斷調(diào)函數(shù)執(zhí)行錯誤的問題呢

    我想問個事,正在使用外部中斷。配置好引腳,綁定中斷調(diào)函數(shù)。一開始為了驗(yàn)證編程正確,能進(jìn)入調(diào)
    發(fā)表于 08-22 14:22

    詳解java 調(diào)機(jī)制

    代碼示例 接下來看一下調(diào)的代碼示例,代碼模擬的是這樣一種場景:老師問學(xué)生問題,學(xué)生思考完畢回答老師。 首先定義一調(diào)接口,只有一
    發(fā)表于 09-28 13:14 ?0次下載

    LabWindows/CVI 程序 調(diào)函數(shù)設(shè)計

    調(diào)函數(shù)是系統(tǒng)框架設(shè)計中非常重要的一種手段,所謂調(diào)函數(shù)(callback )是指一通過函數(shù)指針調(diào)用的函數(shù)。
    發(fā)表于 05-03 16:54 ?1.1w次閱讀
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>調(diào)</b>函數(shù)設(shè)計

    調(diào)函數(shù)的詳細(xì)資料說明

    異步事件的處理,首先將異步事件發(fā)生時需要執(zhí)行的代碼編寫成一函數(shù),并將該函數(shù)注冊成為調(diào)函數(shù),這樣當(dāng)該異步事件發(fā)生時,系統(tǒng)會自動調(diào)用事先注冊好的調(diào)
    發(fā)表于 02-28 08:00 ?6次下載
    <b class='flag-5'>回</b><b class='flag-5'>調(diào)</b>函數(shù)的詳細(xì)資料說明

    STM32Cube HAL庫中斷處理機(jī)制 以及調(diào)函數(shù)實(shí)現(xiàn)原理

    STM32Cube HAL庫中斷處理機(jī)制,以及調(diào)函數(shù)實(shí)現(xiàn)原理
    的頭像 發(fā)表于 03-03 14:01 ?1.3w次閱讀

    C語言函數(shù)的調(diào)函數(shù)

    ,如果過后再執(zhí)行,則稱之為異步調(diào)。 調(diào)函數(shù)就是一通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一
    的頭像 發(fā)表于 09-11 09:57 ?4070次閱讀

    HAL庫中斷處理以及相關(guān)的調(diào)函數(shù)

    驅(qū)動的開發(fā)時間,把重心放在應(yīng)用代碼上。 ? 但是,STM32CubeMX只是生成了底層驅(qū)動的初始化代碼。所以,我們還需要掌握:應(yīng)用層代碼如何調(diào)用HAL庫函數(shù)(API接口),以及HAL庫中斷處理機(jī)制等相關(guān)知識。? HAL庫牽涉的內(nèi)容較多,下面簡單描述一下HAL庫中斷處理,以
    的頭像 發(fā)表于 01-07 11:46 ?9316次閱讀
    HAL庫<b class='flag-5'>中斷</b>處理以及相關(guān)的<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b>函數(shù)

    STM32編程時,如何確定中斷調(diào)函數(shù)的入口

    問題有通用的解法。下面以ADC1為例,來查找它的中斷調(diào)函數(shù)。首先打開CubeMX生成的代碼,找到所有中斷函數(shù)入口的C文件首先需要編譯一下
    發(fā)表于 11-23 18:06 ?13次下載
    STM32編程時,如何確定<b class='flag-5'>中斷</b><b class='flag-5'>回</b><b class='flag-5'>調(diào)</b>函數(shù)的入口

    根據(jù)調(diào)機(jī)制注冊事件并處理調(diào)VI

    通過事件調(diào)注冊函數(shù)(Register Event Callback)注冊一調(diào)VI,在事件發(fā)生時會運(yùn)行該回
    的頭像 發(fā)表于 11-24 09:15 ?2122次閱讀

    C語言|調(diào)函數(shù)的不同用法

    調(diào)函數(shù)是高級操作技巧,也是日常項(xiàng)目中常常使用到的技能。之所以說調(diào)函數(shù)是高級操作技巧,是因
    發(fā)表于 07-10 10:34 ?1197次閱讀

    調(diào)函數(shù)(callback)是什么?調(diào)函數(shù)的實(shí)現(xiàn)方法

    調(diào)函數(shù)是一種特殊的函數(shù),它作為參數(shù)傳遞給另一函數(shù),并在被調(diào)用函數(shù)執(zhí)行完畢后被調(diào)用。調(diào)函數(shù)通常用于事件處理、異步編程和處理各種操作系統(tǒng)和
    發(fā)表于 03-12 11:46 ?2479次閱讀