嵌入式C函数宏问题

时间:2010-10-12 07:27:48

标签: c macros embedded

我在使用C的嵌入式硬件中遇到过这种情况。

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

我不知道这个函数宏是如何工作的。我理解clkcon是EnterPWDN的函数参数,但之后会发生什么?

3 个答案:

答案 0 :(得分:8)

它将地址0xc0080e0强制转换为指向函数的指针,该函数接受int并返回void,并调用该函数,并将clkcon作为参数传递。

拼写出来:

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

(如果您没有遇到函数指针,可能需要grab a good C introduction并阅读相关主题。)

答案 1 :(得分:5)

它是一个void函数指针,它将int作为参数。该功能保存在特定的存储器地址0xc0080e0。

(void (*)(int))

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

答案 2 :(得分:3)

优秀的答案Gozsbi,但换句话说:

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