嵌入式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并接受零参数。 因此,传递给函数调用的任何参数都会太多。