I am trying to write a function which will configure a peripheral of a microcontroller in C. To do so, I have used va_arg. Here is the function:
void init_peripheral(int ID, ...){
va_list device;
va_start(device, ID);
io * temp; // No error here
//io is a structure
//IO, USART, LCD are 01, 02, 03.
(*temp).portB.set = set_portB;
if( ID == IO ){
io* config_io; // error:expected specifier-qualifier-list before ‘*’ token
config_io = va_arg(device, *io);
(*config_io).portB.set = set_portB;
(*config_io).portB.clr = clr_portB;
(*config_io).portB.mkin = mkin_portB;
(*config_io).portB.mkout = mkout_portB;
(*config_io).portC.set = set_portC;
(*config_io).portC.clr = clr_portC;
(*config_io).portC.mkin = mkin_portC;
(*config_io).portC.mkout = mkout_portC;
(*config_io).portD.set = set_portD;
(*config_io).portD.clr = clr_portD;
(*config_io).portD.mkin = mkin_portD;
(*config_io).portD.mkout = mkout_portD;
}
else if( ID == LCD ){
lcd *config_lcd;
config_lcd = va_arg(device, *lcd);
//Set necessary params here
}
else if( ID == USART){
usart *config_usart;
config_usart = va_arg(device, *usart);
(*config_usart).init = usart_init;
(*config_usart).transmit = usart_transmit;
(*config_usart).receive = usart_receive;
}
va_end(device);
}
I don’t get an error for the line io * temp, but I do get an error for io * config_io;
Here is the io struct:
struct __io__{
struct __port__ portB;
struct __port__ portC;
struct __port__ portD;
};
typedef struct __io__ io;
The problem is actually in the next line, with the
va_argmacro. You’re sending a dereferenced pointer instead of a type:Here’s your code, which has the compilation problems.
Here’s the fixed version.