Embedded C - Too many arguments to function (pointer)

c, embedded, gcc

Solution

For readability, define a signature for the function to be called:

typedef void signature_t(int, int);

Then you can cast your ROM location

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

and with a recent GCC (current version of GCC is 4.6) I would make that an inline function

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

Problem

I am trying to invoke the following macro in my .cpp file: ``` #define IAP_ROM_LOCATION 0x1FFF1FF1UL #define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b) ``` However, when I call said function like so: ``` IAP_EXECUTE_CMD(0, 0); ``` I get an error saying too many arguments specified? How is this? I would appreciate any pointers. Development environment is GCC for Cortex-M3.

Original source