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