c - Expected expression before 'struct' - Error -
i'm using crossstudio ide make simple function prototype initializes uart baudrate , other parameters stm32f30x arm processor. goal of function prototype print baudrate initialization peripheral (stm32f30x.c), expected '9600'. instead error "expected expression before 'usart_init'" returned. there 3 files in total:
1) config_uart.c -> contains function prototype 2) stm32f30x_usart.c -> contains initializing function, call config_uart.c 3) stm32f30x_usart.h -> contains prototype struct definition
config_uart.c body
void comm_initial (void) { typedef struct usart_init usart_init; void usart_structinit(usart_initstruct); printf("%d\n", usart_init->usart_baudrate); }
from stm32f30x_usart.c body
void usart_structinit(usart_inittypedef* usart_initstruct) { /* usart_initstruct members default value */ usart_initstruct->usart_baudrate = 9600; usart_initstruct->usart_wordlength = usart_wordlength_8b; usart_initstruct->usart_stopbits = usart_stopbits_1; usart_initstruct->usart_parity = usart_parity_no ; usart_initstruct->usart_mode = usart_mode_rx | usart_mode_tx; usart_initstruct->usart_hardwareflowcontrol = usart_hardwareflowcontrol_none; }
from stm32f30x_usart.h body
typedef struct { uint32_t usart_baudrate; uint32_t usart_wordlength; uint32_t usart_stopbits; uint32_t usart_parity; uint32_t usart_mode; uint32_t usart_hardwareflowcontrol; } usart_inittypedef;
i'm unsure error i've tried multiple variations in attempt identify problem, closest i've gotten. not understanding? appreciated.
void comm_initial (void) { typedef struct usart_init usart_init;
i don't see type struct usart_init
defined anywhere. typedef still permitted, refers incomplete type.
you have type named usart_inittypedef
has member named usart_baudrate
.
void usart_structinit(usart_initstruct); printf("%d\n", usart_init->usart_baudrate); }
usart_init
type name. ->
operator requires expression of pointer-to-struct or pointer-to-union type left operand.
if replace usart_init
expression of type usart_inittypedef*
, should able evaluate expression.
note %d
requires argument of type int
, not uint32_t
. there several ways print uint32_t
value; simplest is:
printf("%lu\n", (unsigned long)some_pointer->usart_baudrate);
Comments
Post a Comment