【问题标题】:Embedded C function macro problem嵌入式C函数宏问题
【发布时间】:2010-10-12 07:27:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: c macros embedded


    【解决方案1】:

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

    拼写:

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

    (如果您还没有遇到函数指针,您可能想grab a good C introduction 并阅读该主题。)

    【讨论】:

      【解决方案2】:

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

      (void (*)(int))
      

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

      【讨论】:

        【解决方案3】:

        优秀的答案Goz 和sbi,但换一种说法:

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

        【讨论】:

          猜你喜欢
          • 2018-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多