我使用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”传递给它。