usart_register_callback();函数使用经验

原代码如下:
void config_ble_usart(void)
{
struct usart_config config_usart;
usart_get_config_defaults(&config_usart);

config_usart.baudrate=19200;
config_usart.mux_setting=USART_RX_3_TX_2_XCK_3;
config_usart.pinmux_pad0=PINMUX_UNUSED;
config_usart.pinmux_pad1=PINMUX_UNUSED;
config_usart.pinmux_pad2=PINMUX_PA24C_SERCOM3_PAD2;
config_usart.pinmux_pad3=PINMUX_PA25C_SERCOM3_PAD3;


while(usart_init(&ble_usart_instance,SERCOM3,&config_usart)!=STATUS_OK)
{};
usart_enable(&ble_usart_instance);

usart_register_callback(&ble_usart_instance,ble_usart_read_callback, USART_CALLBACK_BUFFER_RECEIVED);
usart_register_callback(&ble_usart_instance,ble_usart_write_callback,USART_CALLBACK_BUFFER_TRANSMITTED);

usart_enable_callback(&ble_usart_instance,USART_CALLBACK_BUFFER_RECEIVED);
usart_enable_callback(&ble_usart_instance,USART_CALLBACK_BUFFER_TRANSMITTED);

}
其中,回调函数为:
static void ble_usart_read_callback(struct usart_module *const module)
{
usart_write_buffer_wait(&ble_usart_instance,ble_rx_buffer,20);
//delay_ms(100);
}
回调函数在ble.c文件里,类型为static void,此时不必在相应的.h文件里添加函数声明,否则报错(“ble_usart_read_callback”declared “static” but not defined)。
如果回调函数为正确类型,例如这里写代码片为“static void”,但是其中形参为const struct usart_module const module,而不是struct usart_module *const module,则会报错(passing arguement 2 of “usart_register_callback()”,expected ‘usart_callback_t{aka void()struct usart_module const}’but arguement is type of ‘void()const struct usart_module *const’ )。

猜你喜欢

转载自blog.csdn.net/qq_38605382/article/details/81295759