有些時候,我們只想定義函式,卻不想手動呼叫函式,而是希望這些函式在系統上電時自動呼叫。比如在寫裝置驅動時,裝置的初始化函式就是這樣一種函式,我們希望所有裝置在上電的時候被初始化,每次增加乙個裝置時,不需要想著去呼叫這個函式,定義完之後,自己就被加入到裝置初始化函式集中。
解決的方案有很多,比如寫個預處理指令碼,把特定格式宣告的函式掃瞄上來,生成乙個陣列,然後統一呼叫,不過,這裡有另一種解決方法:為每乙個函式定義乙個指標變數,然後將這個指標變數放到特定的section中,鏈結器最終會把同名的section組合到一起,即自動生成乙個函式指標陣列,訪問鏈結器生成的符號即可。
typedef void(*deviceinitfunction_t)(void);#define device_init_function(func) \
deviceinitfunction_t func##ptr __attribute__((section("sectionname"))) = func
// 定義乙個裝置初始化函式
device_init_function(initi2c);
void initi2c(void)
// 統一呼叫所有的裝置初始化函式
void initalldevices(void)
}
嵌入式團隊培訓 函式
三 函式名 四 引數 五 值傳遞 址傳遞和引用傳遞 六 遞迴函式 七 總結 八 作業 數學上的函式 z f x,y 因變數 函式名 自變數,自變數 計算機的函式 返回值 函式名 引數,引數 函式指標 void f int x,int y int f int x,int y int f int x,i...
初識嵌入式 嵌入式開發概述
1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...
Linux嵌入式 核心 系統呼叫
1.系統呼叫 定義 linux核心中設定了一組用於實現各種系統功能的子程式,稱為系統呼叫。使用者可以通過系統呼叫命令在自己的應用程式中呼叫它們。系統呼叫和普通的函式呼叫非常相似,區別僅僅在於,系統呼叫由作業系統核心實現,執行於核心態 而普通的函式呼叫由函式庫或使用者自己提供,執行於使用者態。2.系統...