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

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

#define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b) 

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

 IAP_EXECUTE_CMD(0, 0); 

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

开发环境是Cortex-M3的GCC。

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

 typedef void signature_t(int, int); 

然后你可以转换你的ROM位置

 #define IAP_EXECUTE_CMD(a, b) ((signature_t*)IAP_ROM_LOCATION) ((a),(b)) 

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

 static inline void iap_execute_cmd(int a, int b) { ((signature_t*)IAP_ROM_LOCATION) ((a),(b)); } 
 (void (*)())(IAP_ROM_LOCATION) 

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

您也可以仅使用宏来执行此操作:

 #define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_FUNC_SIGNATURE void (*)(int, int) #define IAP_EXECUTE_CMD(a, b) ((IAP_FUNC_SIGNATURE)(IAP_ROM_LOCATION))((a), (b)) 

好吧,我的C相当生疏,但在我看来,你的IAP_EXECUTE_CMD()宏正在将无符号长地址转换为指向函数的指针,该函数返回void并接受零参数。 因此,传递给函数调用的任何参数都会太多。