应用情况:ESP32C3与IMX6ULL(Linux系统)进行串口通信。
具体描述:当ESP32C3发送包大于128字节时IMX6ULL的读取会出现分包情况,问题原因查到是ESP32C3的发送缓存buffer默认是128字节,两个串口共享512字节。但是ESP32的开发者进行缓存调整后仍然是128字节出现分包。
问题:想问从Linux系统这里怎么解决这个分包问题?
下面是接收函数:
//读串口
int32_t sdk_uart_read(sdk_uart_t *p_uart, int8_t *buf, uint32_t buf_len, uint32_t timeout_ms)
{
int32_t len=-1;
fd_set rd_set;
struct timeval time_out;
time_out.tv_sec=0;//秒
time_out.tv_usec=(time_t)timeout_ms*1000;//微秒
FD_ZERO(&rd_set); //每次循环都要清空集合,否则不能检测描述符变化
FD_SET(p_uart->fd,&rd_set); //添加描述符
switch(select(p_uart->fd+1,&rd_set,NULL,NULL,&time_out))
{
case -1:
printf("select failure:%s\n",strerror(errno));
return -1;
case 0:
//printf("select timeout_ms\n");
return -1;
default:
if(FD_ISSET(p_uart->fd, &rd_set)) //测试句柄是否可写
{
if((len=read(p_uart->fd, buf, buf_len))<0)
{
printf("read from serial port failure:%s\n",strerror(errno));
return -1;
}
}
}
return len;
}