使用 uart select 接收超时的问题
Posted: Sat Nov 24, 2018 12:37 am
在使用uart的select来接收数据时, 传入read函数的buflen小于输入缓冲区内已经接收到的数据, 仅在第一次调用select函数时可以正确的执行,然后recv 指定长度的数据;
当我第二次调用select函数时, 它会提醒我timeout,但是此时输入缓冲区内依然还有数据没有被recv;
当然,每一次调用select之前都已经使用FD_ZERO和FD_SET函数来清理套接字集合.
可以在例程peripherals/uart_select上进行简单改造来重现这一现象:
1. 将UART_NUM_0修改为UART_NUM_1或者UART_NUM_2, 相应的修改相关的参数, recv接收长度设置为1
2. 串口工具连接uart接口, 通过串口工具 发送一次 0x02 0x03
3. 观察程序打印的接收到的数据, 可以看到只接收到0x02 ,然后提示timeout
4. 通过串口工具再次发送 0x02 0x03, 可以看到打印出来的字符为0x03, 证明上一次接收到的0x03在输入缓冲区内.
我该如何解决此问题呢? 谢谢
当我第二次调用select函数时, 它会提醒我timeout,但是此时输入缓冲区内依然还有数据没有被recv;
当然,每一次调用select之前都已经使用FD_ZERO和FD_SET函数来清理套接字集合.
可以在例程peripherals/uart_select上进行简单改造来重现这一现象:
1. 将UART_NUM_0修改为UART_NUM_1或者UART_NUM_2, 相应的修改相关的参数, recv接收长度设置为1
2. 串口工具连接uart接口, 通过串口工具 发送一次 0x02 0x03
3. 观察程序打印的接收到的数据, 可以看到只接收到0x02 ,然后提示timeout
4. 通过串口工具再次发送 0x02 0x03, 可以看到打印出来的字符为0x03, 证明上一次接收到的0x03在输入缓冲区内.
我该如何解决此问题呢? 谢谢