嵌入式C - 函数的参数太多(指针)

Jam*_*mes 5 c embedded gcc

我试图在我的.cpp文件中调用以下宏:

#define IAP_ROM_LOCATION                0x1FFF1FF1UL
#define IAP_EXECUTE_CMD(a, b)           ((void (*)())(IAP_ROM_LOCATION))(a, b)
Run Code Online (Sandbox Code Playgroud)

但是,当我像这样调用所述函数时:

IAP_EXECUTE_CMD(0, 0);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说明有太多的参数?这怎么样?我会很感激任何指针.

开发环境是Cortex-M3的GCC.

Bas*_*tch 15

为了便于阅读,请为要调用的函数定义签名:

typedef void signature_t(int, int);
Run Code Online (Sandbox Code Playgroud)

然后你可以投射你的ROM位置

#define IAP_EXECUTE_CMD(a, b)  ((signature_t*)IAP_ROM_LOCATION) ((a),(b))
Run Code Online (Sandbox Code Playgroud)

并且最近的GCC(当前版本的GCC是4.6)我会将其作为内联函数

static inline void iap_execute_cmd(int a, int b) {
    ((signature_t*)IAP_ROM_LOCATION) ((a),(b));
}
Run Code Online (Sandbox Code Playgroud)


Bjö*_*lex 5

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

这部分转换IAP_ROM_LOCATION为一个指向函数的指针,该函数不带参数并且不返回任何内容(void (*)()).因此,当您想要将任何参数传递给该函数时,会出现错误.