SDK版本:3.11.11
芯片/模块:T1-CHL
问题1.
TUYA_UART_NUM_1(日志口)的不能串口接收,无法通过tkl_uart_rx_irq_cb_reg注册回调的方式读取,我想使用日志口作为终端命令行输入。
Code: Select all
# 在初始化函数中,将MCU跟日志口同注册到同一个回调中进行测试
tkl_uart_rx_irq_cb_reg(TUYA_UART_NUM_0, bsp_uart_rx_callback);
tkl_uart_rx_irq_cb_reg(TUYA_UART_NUM_1, bsp_uart_rx_callback);
# 在回调中,若能收到数据,都通过日志口进行输出,分别测试NUM_0和NUM_1的接收
# 分别向MCU串口和日志口串口发送数据,发现,只会打印MCU(非日志口)的输入
static void bsp_uart_rx_callback(TUYA_UART_NUM_E port_id)
{
uint8_t buf[128];
uint8_t*pdst = buf;
int len;
while(1){
len = tkl_uart_read(port_id,buf,sizeof(buf));
if(len <= 0){
break;
}
// 回环测试,看是否能收到数据
tkl_uart_write(TUYA_UART_NUM_1,pdst,len);
}
}
问题2:
我看了官方驱动tkl_uart_write的实现(tuyaos_adapter/src/driver/tkl_uart.c)中调用的是uart_bk.c中bk_send_byte,而bk_send_byte采用的CPU死等的方式进行数据发送,具体代码如下,那跟串口发送岂不是严重影响CPU的性能?
Code: Select all
void bk_send_byte(UINT8 uport, UINT8 data)
{
if(UART1_PORT == uport)
while(!UART1_TX_WRITE_READY);
else
while(!UART2_TX_WRITE_READY);
UART_WRITE_BYTE(uport, data);
}