diff --git a/bsp/imxrt/libraries/drivers/drv_uart.c b/bsp/imxrt/libraries/drivers/drv_uart.c index 1d7e95a276a540657bd9498c20428f8c406ea332..d471f29dec5e1a28ef39c27339a93253cd20248c 100644 --- a/bsp/imxrt/libraries/drivers/drv_uart.c +++ b/bsp/imxrt/libraries/drivers/drv_uart.c @@ -582,8 +582,7 @@ static rt_err_t imxrt_configure(struct rt_serial_device *serial, struct serial_c RT_ASSERT(serial != RT_NULL); RT_ASSERT(cfg != RT_NULL); - uart = (struct imxrt_uart *)serial->parent.user_data; - RT_ASSERT(uart != RT_NULL); + uart = rt_container_of(serial, struct imxrt_uart, serial); LPUART_GetDefaultConfig(&config); config.baudRate_Bps = cfg->baud_rate; @@ -635,8 +634,7 @@ static rt_err_t imxrt_control(struct rt_serial_device *serial, int cmd, void *ar struct imxrt_uart *uart; RT_ASSERT(serial != RT_NULL); - uart = (struct imxrt_uart *)serial->parent.user_data; - RT_ASSERT(uart != RT_NULL); + uart = rt_container_of(serial, struct imxrt_uart, serial); #if defined(RT_SERIAL_USING_DMA) && defined(BSP_USING_DMA) rt_ubase_t ctrl_arg = (rt_ubase_t)arg; @@ -677,8 +675,7 @@ static int imxrt_putc(struct rt_serial_device *serial, char ch) struct imxrt_uart *uart; RT_ASSERT(serial != RT_NULL); - uart = (struct imxrt_uart *)serial->parent.user_data; - RT_ASSERT(uart != RT_NULL); + uart = rt_container_of(serial, struct imxrt_uart, serial); LPUART_WriteByte(uart->uart_base, ch); while (!(LPUART_GetStatusFlags(uart->uart_base) & kLPUART_TxDataRegEmptyFlag)); @@ -692,8 +689,7 @@ static int imxrt_getc(struct rt_serial_device *serial) struct imxrt_uart *uart; RT_ASSERT(serial != RT_NULL); - uart = (struct imxrt_uart *)serial->parent.user_data; - RT_ASSERT(uart != RT_NULL); + uart = rt_container_of(serial, struct imxrt_uart, serial); ch = -1; if (LPUART_GetStatusFlags(uart->uart_base) & kLPUART_RxDataRegFullFlag) @@ -712,7 +708,7 @@ rt_size_t dma_tx_xfer(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_ rt_size_t xfer_size = 0; RT_ASSERT(serial != RT_NULL); - uart = (struct imxrt_uart *)serial->parent.user_data; + uart = rt_container_of(serial, struct imxrt_uart, serial); if (0 != size) { @@ -760,7 +756,7 @@ int rt_hw_uart_init(void) uarts[i].serial.ops = &imxrt_uart_ops; uarts[i].serial.config = config; - ret = rt_hw_serial_register(&uarts[i].serial, uarts[i].name, flag | uarts[i].dma_flag, (void *)&uarts[i]); + ret = rt_hw_serial_register(&uarts[i].serial, uarts[i].name, flag | uarts[i].dma_flag, NULL); } return ret;