嵌入式技术william hill官网
直播中

王越建

7年用户 1445经验值
私信 关注
[问答]

为什么rt_device_read()函数只能固定接收一个字节呢?

调用 rt_device_read() 只能固定接收一个字节
代码如下

if(modbus_serial)
{
rt_device_open(modbus_serial,RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX);
rec_len = rt_device_read(modbus_serial, -1, USART5_RX_BUF, 8);
if(rec_len > 6)
{
modebus_proc(USART5_RX_BUF, rec_len, USART5_TX_BUF);
}
rt_device_close(modbus_serial);
}

用串口助手发送数据 01 02 03 04 05 06 07,调试下发现rec_len永远都是1,if(rec_len > 6)也一直进不去

回帖(4)

杨海清

2023-1-10 17:08:22
串口接收的是流数据,serialX 驱动有一套标准保险做法,详细代码去看 serialX 全网公测里怎么写的吧。
举报

杨海清

2023-1-10 17:08:29
加延时的做法不可取,一个字节一个字节读取的做法很low
举报

王越建

2023-1-10 17:08:36
主要是不懂为什么既然每次只能接收一个字节,rtthread uart介绍中描述得好像只要设置rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)中的size参数就能读取多个字节。
举报

杨海清

2023-1-10 17:08:46
不定长度,不一定能读到多少数据. size 是应用层读取的最长长度。底层返给应用层的可以少于 size 的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分