我试图在我的.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)
(void (*)())(IAP_ROM_LOCATION)
Run Code Online (Sandbox Code Playgroud)
这部分转换IAP_ROM_LOCATION为一个指向函数的指针,该函数不带参数并且不返回任何内容(void (*)()).因此,当您想要将任何参数传递给该函数时,会出现错误.
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |