Other Parts Discussed in Thread: SYSCONFIG
Hi Ti,
我在使用串口时遇到两个问题,串口配置为 read callback 模式:

void uart_read_cb(UART_Handle handle, void *buf, size_t count)
{
Display_printf(display, 0, 0, "recv data(%d): %s", count, (char*)buf);
// uint8_t tmpBuf[255]; RSBUS_PACK_MAX_LENGTH = 255;
memset(tmpBuf, 0, RSBUS_PACK_MAX_LENGTH);
UART2_read(uartHandle, tmpBuf, RSBUS_PACK_MAX_LENGTH, &recvCnt);
}
int8_t rsbus_init(void)
{
UART2_Params uartParams2;
/* Create a UART where the default read and write mode is BLOCKING */
UART2_Params_init(&uartParams2);
uartParams2.baudRate = RSBUS_BAUDRATE; // RSBUS_BAUDRATE = 2000000
uartParams2.readCallback = (UART2_Callback)uart_read_cb;
uartParams2.readMode = UART2_Mode_CALLBACK;
uartParams2.readReturnMode = UART2_ReadReturnMode_PARTIAL;
uartHandle = UART2_open(CONFIG_UART2_0, &uartParams2);
if (uartHandle == NULL) {
/* UART2_open() failed */
Display_printf(display, 0, 0, "UART2_open failed");
return FALSE;
}
// uint8_t tmpBuf[255]; RSBUS_PACK_MAX_LENGTH = 255;
memset(tmpBuf, 0, RSBUS_PACK_MAX_LENGTH);
UART2_read(uartHandle, tmpBuf, RSBUS_PACK_MAX_LENGTH, &recvCnt);
return TRUE;
}
问题一:
按上面的配置,我的 main() 里初始化后只有一个空的 while(1) 循环.
我通过其他串口工具发送数据,每次发生100个字符,出现下面的结果:这个程序只能接受到 255 (100+100+55) 个字节,和上面 sysconfig 配置的一样,然后程序就卡死了,必须上电才能 重新运行。

只是因为缓冲区没有清空吗?但是我也调用了 memcpy() 清内存啊。。。是否还需要其他函数清空内部缓存呢?

问题二:
当我发送的数据长度超过 136 个字符时,串口只接收了 136 字节,并卡死。这个又是什么原因呢?

总结一下以上的现象:当发送的总字符数超过 sysconfig 设置的 Rx Ring Buffer size ,或者 单次发送超过 136 个字符后,程序都会卡死。(我试过将 Rx Ring Buffer size 换其他值,现象是一致的)
谢谢!