我使用C.嵌入式C函數宏觀問題
#define EnterPWDN(clkcon) ( (void (*)(int))0xc0080e0) (clkcon)
我不知道這是怎麼函數宏工作過這個排在嵌入式硬件。我知道clkcon
是EnterPWDN的函數參數,但是之後發生了什麼?
我使用C.嵌入式C函數宏觀問題
#define EnterPWDN(clkcon) ( (void (*)(int))0xc0080e0) (clkcon)
我不知道這是怎麼函數宏工作過這個排在嵌入式硬件。我知道clkcon
是EnterPWDN的函數參數,但是之後發生了什麼?
它施放地址0xc0080e0
的指針函數獲取int
和返回void
,並調用該函數,傳遞clkcon
作爲參數。
闡明:
typedef void (func_ptr*)(int);
func_ptr func = (func_ptr)0xc0080e0;
func(clkcon);
(如果您有沒有碰到過的函數指針來了,你可能想grab a good C introduction,並在主題讀了)
它是一個空函數指針,它接受一個int作爲參數。該函數保存在特定的內存地址0xc0080e0處。
(void (*)(int))
以上是函數指針聲明。首先是無效返回類型。接下來的事實是,它的指針,最後是int告訴你函數的參數是什麼。內存地址是函數存儲的位置,整個過程將該內存地址轉換爲正確的函數指針類型,然後調用該函數並將「clkcon」傳遞給它。