嵌入式C函数宏问题

发布于 2024-09-27 01:25:44 字数 183 浏览 3 评论 0原文

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

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

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

I came across this in embedded hardware using C.

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

I have no idea how is this function macro working. I understand clkcon is the function parameter to EnterPWDN, but what is happening after that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

罗罗贝儿 2024-10-04 01:25:44

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

详细说明:(

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

如果您还没有遇到过函数指针,您可能需要 获取一份很好的 C 简介并阅读该主题。)

It casts the address 0xc0080e0 to a pointer to function taking an int and returning void, and calls that function, passing clkcon as the parameter.

Spelled out:

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

(If you haven't come across function pointers, you might want to grab a good C introduction and read up on the subject.)

瑶笙 2024-10-04 01:25:44

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

(void (*)(int))

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

Its a void function pointer that takes an int as a parameter. The function is held at the specific memory address 0xc0080e0.

(void (*)(int))

The above is a function pointer declaration. First comes the void return type. Next comes the fact that its a pointer and finally the int tells you what the parameter to the function is. The memory address is the location the function is stored at and the whole thing is casting that memory address into the correct function pointer type and then calling the function and passing "clkcon" to it.

你是我的挚爱i 2024-10-04 01:25:44

优秀的答案 Gozsbi< /a>,但换句话说:

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

Excellent answers Goz and sbi, but to put it another way:

At a specific address (0xc0080e0) in memory, possibly in a ROM, there is a function. You call this function with the int clkcon argument.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文