回調(diào)是對(duì)更高級(jí)別軟件傳遞到函數(shù)的可執(zhí)行代碼的引用。這些回調(diào)能夠極大地提高嵌入式軟件的可移植性和重用性,但是根據(jù)它們的定義,它們需要使用函數(shù)指針,如果不仔細(xì)使用,可能會(huì)非常危險(xiǎn)。以下是在嵌入式系統(tǒng)中安全地創(chuàng)建和使用回調(diào)的五個(gè)技巧,特別是將它們與中斷一起使用。
技巧1 -創(chuàng)建集合或注冊(cè)方法- 回調(diào)是最常見的是將函數(shù)指針傳遞給函數(shù),但它們也可以在便攜式系統(tǒng)中用于設(shè)置將由中斷服務(wù)例程(ISR)調(diào)用的函數(shù)。當(dāng)中斷觸發(fā)時(shí),中斷處理程序?qū)瑢?duì)應(yīng)該執(zhí)行的函數(shù)的引用。為了以可重用的方式設(shè)置被調(diào)用的函數(shù),創(chuàng)建允許回調(diào)函數(shù)向模塊注冊(cè)的接口會(huì)很有幫助。創(chuàng)建寄存器或集合函數(shù)允許ISR處理程序是通用的,封裝的,甚至可以編譯為外設(shè)庫的一部分。中斷的可執(zhí)行函數(shù)將在運(yùn)行時(shí)設(shè)置。
技巧2 -將回調(diào)初始化為NULL或默認(rèn)- 創(chuàng)建包含回調(diào)寄存器或設(shè)置功能的外設(shè)驅(qū)動(dòng)程序接口是創(chuàng)建可移植中斷的重要一步。但是有一個(gè)問題:如果回調(diào)永遠(yuǎn)不會(huì)被注冊(cè)但是中斷變?yōu)閱⒂萌缓笥|發(fā)會(huì)發(fā)生什么?中斷服務(wù)程序需要某種方式來判斷是否已注冊(cè)回調(diào)函數(shù)。提供此類驗(yàn)證的最簡單方法是首先將回調(diào)函數(shù)指針初始化為NULL。在ISR中對(duì)NULL進(jìn)行簡單檢查將阻止任何處理程序執(zhí)行。使用NULL的另一種方法是初始化指向通用和空中斷處理程序的指針。當(dāng)未初始化的中斷回調(diào)被觸發(fā)時(shí),默認(rèn)處理程序?qū)⑦\(yùn)行。
技巧3 -使用前驗(yàn)證回調(diào)- 將回調(diào)指針的初始值設(shè)置為NULL或通用處理程序允許中斷驗(yàn)證中斷處理程序是組。但是,在使用函數(shù)指針時(shí),首先要確認(rèn)內(nèi)存中引用的位置不是NULL并且確實(shí)存在于系統(tǒng)中是一個(gè)好主意。函數(shù)指針可能非常危險(xiǎn),在進(jìn)行調(diào)用之前應(yīng)注意確保指向的位置有效。
提示4 -使用回調(diào)向較低級(jí)別的固件添加功能- 回調(diào)函數(shù)對(duì)于在通用和應(yīng)用程序中向較低級(jí)別驅(qū)動(dòng)程序和應(yīng)用程序代碼添加功能非常有用特定的方式。為了生成松散耦合且具有高內(nèi)聚性的固件,開發(fā)人員可以通過使用回調(diào)將中斷向量和對(duì)其他外圍模塊的引用傳遞到驅(qū)動(dòng)程序中?;卣{(diào)允許開發(fā)人員在設(shè)計(jì)時(shí)添加特定于應(yīng)用程序的功能,而無需不斷修改驅(qū)動(dòng)程序代碼以獲得所需的行為??梢酝ㄟ^這種方式使用回調(diào)來生成非常干凈,可移植且可重復(fù)使用的固件和接口。
提示5 -創(chuàng)建抽象回調(diào)函數(shù)- 回調(diào)函數(shù)通常需要采用參數(shù)數(shù)量未知,它們可能會(huì)也可能不會(huì)返回?cái)?shù)據(jù),具體取決于應(yīng)用程序的需求。然而,開發(fā)人員的目標(biāo)是編寫抽象的回調(diào)函數(shù)。對(duì)于與中斷相關(guān)的回調(diào),其中回調(diào)只是作為中斷服務(wù)程序的一部分被調(diào)用,該函數(shù)可以獲取void參數(shù)并返回void。需要與應(yīng)用程序共享的任何數(shù)據(jù)都將以與中斷相同的方式處理。對(duì)于可能與錯(cuò)誤處理或其他自定義功能相關(guān)的驅(qū)動(dòng)程序的回調(diào),處理參數(shù)和返回值的最簡單方法是傳遞指針并返回指針。
最后的想法
回調(diào)可以在嵌入式系統(tǒng)中找到廣泛的用途,特別是在開發(fā)便攜式和可重復(fù)使用的固件時(shí)。本文提供了五個(gè)開發(fā)人員如何考慮和實(shí)現(xiàn)中斷回調(diào)的示例,但它們只是其中的一小部分。
-
PCB打樣
+關(guān)注
關(guān)注
17文章
2968瀏覽量
21760 -
華強(qiáng)PCB
+關(guān)注
關(guān)注
8文章
1831瀏覽量
27847 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43109
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論