回調(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)的示例,但它們只是其中的一小部分。
-
PCB打樣
+關(guān)注
關(guān)注
17文章
2968瀏覽量
21608 -
華強(qiáng)PCB
+關(guān)注
關(guān)注
8文章
1831瀏覽量
27682 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
42903
發(fā)布評論請先 登錄
相關(guān)推薦
評論