u boot第二階段原始碼分析

2021-05-25 01:40:26 字數 1230 閱讀 1344

typedef int (init_fnc_t) (void);

init_fnc_t *init_sequence = ;

void start_armboot (void)

}理解:1)  init_fnc_t宣告為函式型別,這個函式型別的引數為空,函式返回值為int整型。

2)init_fnc_t *init_sequence   因為init_fnc_t 已經宣告為函式的型別,所以init_fnc_t *init_sequence 的意思是: 定義了乙個函式指標陣列,init_sequence為函式指標陣列名,其成員變數是指向函式的指標變數(指向函式的型別是:引數為空,函式返回值為int整型)

3):for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)

}為呼叫函式指標陣列中成員變數所指向的函式,如果呼叫成功的話,被呼叫的函式返回0,呼叫不成功,程式被掛起。

附:c/c++的知識補充

2011-03-18 21:35:53

閱讀14

字型大小:大

小訂閱

1、typedef  int (init_fnc_t) (void);表示定義init_fnc_t為函式型別,該函式返回int型,無引數。

而「init_fnc_t  *init_sequence=」表示用init_fnc_t(函式型別)去定義乙個一維指標陣列,陣列中的元素都是指標變數,而且都是指向函式的指標,這些函式返回值都是int型,無引數的。更明朗的說就是陣列中的每個元素是用來存放函式入口首位址的。

2、int (*init_fnc_t) (void);表示定義乙個函式指標(返回值為int型,無引數的函式指標,存放的是函式的首位址),typedef  int (*init_fnc_t) (void);表示定義乙個函式指標型別,即可以直接用init_fnc_t這個符號去定義函式指標,「init_fnc_t   init_sequence=」表示用init_fnc_t(函式指標型別)去定義乙個陣列,陣列裡面的元素都是乙個函式指標,cpu_init,  board_init 都是函式指標,存放的都是函式的首位址。

綜上的分析,我個人覺得這兩個定義的意思是一樣的只是寫法不一樣而已,1中的陣列元素是指向函式的指標變數,2中的陣列的元素是函式指標。因此得到的結果是一樣的。

說實話,typedef的用法真的挺**,一部小心會讓你掉入陷阱!!!不過能夠用好typedef並深刻理解他的內涵,我覺得個人的c語言能力會是乙個大提高!

u boot原始碼分析 啟動第二階段002

我們先來看初始化函式表 init sequence lib arm board.c typedef int init fnc t void init fnc t init sequence 這些初始化函式會依次執行,我們乙個個的來看 arm920t cpu.c int cpu init void 對...

u boot原始碼分析 啟動第二階段002

我們先來看初始化函式表 init sequence lib arm board.c typedef int init fnc t void init fnc t init sequence 這些初始化函式會依次執行,我們乙個個的來看 arm920t cpu.c int cpu init void 對...

uboot原始碼分析2 啟動第二階段

注意 board init中除了網絡卡的初始化之外,剩下的2行用來初始化ddr。這裡的初始化ddr和彙編階段lowlevel init中初始化ddr是不同的。當時是硬體的初始化,目的是讓ddr可以開始工作。現在是軟體結構中一些ddr相關的屬性配置 位址設定的初始化,是純軟體層面的。注 這個函式只是對...