2010-10-12 70 views
5

我使用C.嵌入式C函数宏观问题

#define EnterPWDN(clkcon) ( (void (*)(int))0xc0080e0) (clkcon) 

我不知道这是怎么函数宏工作过这个排在嵌入式硬件。我知道clkcon是EnterPWDN的函数参数,但是之后发生了什么?

回答

8

它施放地址0xc0080e0的指针函数获取int和返回void,并调用该函数,传递clkcon作为参数。

阐明:

typedef void (func_ptr*)(int); 
func_ptr func = (func_ptr)0xc0080e0; 
func(clkcon); 

(如果您有没有碰到过的函数指针来了,你可能想grab a good C introduction,并在主题读了)

5

它是一个空函数指针,它接受一个int作为参数。该函数保存在特定的内存地址0xc0080e0处。

(void (*)(int)) 

以上是函数指针声明。首先是无效返回类型。接下来的事实是,它的指针,最后是int告诉你函数的参数是什么。内存地址是函数存储的位置,整个过程将该内存地址转换为正确的函数指针类型,然后调用该函数并将“clkcon”传递给它。

3

优秀的答案Gozsbi,而是换一种方式:

在内存中的特定地址(0xc0080e0),可能是在ROM中,有一个函数。您可以使用int clkcon参数调用此函数。