嵌入式C函数宏问题

zen*_*ngr 5 c embedded macros

我在使用C的嵌入式硬件中遇到过这个.

#define EnterPWDN(clkcon) (  (void (*)(int))0xc0080e0 ) (clkcon) 
Run Code Online (Sandbox Code Playgroud)

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

sbi*_*sbi 8

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

拼写出:

typedef void (func_ptr*)(int);
func_ptr func = (func_ptr)0xc0080e0;
func(clkcon);
Run Code Online (Sandbox Code Playgroud)

(如果你没有遇到过函数指针,你可能想要获得一个好的C介绍并阅读这个主题.)


Goz*_*Goz 5

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

(void (*)(int))
Run Code Online (Sandbox Code Playgroud)

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