[求助] 关于串口接收不定长度的数据

李嘉辉   2016-10-12 12:50 楼主
串口接收数据的时候都是把数据从缓冲器里面装到数组里面,但是我们接收的数据长度不一定,如果设置一个长度,但是实际发送的数据长度比接收的数据长度大,这该怎么处理呢?

回复评论 (14)

最简单的办法设置有一个最大的缓冲区,将接收到的数据放在里面。前提条件是内存资源足够使用。还有一种办法是定义双缓冲区,一个缓冲区装满了(或者接收完毕),立刻处理,同时切换到另外一个缓冲区进行接收。接收完毕后处理数据。
点赞  2016-10-12 13:03
引用: azhiking 发表于 2016-10-12 13:03
最简单的办法设置有一个最大的缓冲区,将接收到的数据放在里面。前提条件是内存资源足够使用。还有一种办法 ...

第一种方法不行,这样就限制了发送数据的个数,我的目的是在接受中不能太浪费内存资源,又可以做到发送数据的时候没有长度限制
点赞  2016-10-12 13:10
用循环缓冲区
点赞  2016-10-12 13:11
https://github.com/versaloon/vsf ... ent/buffer/buffer.c

参考里面关于fifo的处理,主要是pop和push两种操作
要666
点赞  2016-10-12 13:14
使用数据结构队列(FIFO)作为缓冲区保存数据,数据最好要有帧格式界定。
亚里士缺德
点赞  2016-10-12 13:16
引用: 汤权 发表于 2016-10-12 13:16
使用数据结构队列(FIFO)作为缓冲区保存数据,数据最好要有帧格式界定。

我在做这样一个模块,这个模块的一个串口接串口设备,另一个串口接wifi模块发送数据,现在是想把这个模块做成一个完整的东西,串口设备这边发送的数据长度都是未知的,(当然格式可以自己定义),无论发送什么数据长度,模块这边都能接收到的这个数据,然后通过打包发送给对方模块在解包恢复原数据给另一个串口设备
点赞  2016-10-12 13:28
引用: le062 发表于 2016-10-12 13:14
https://github.com/versaloon/vsf/blob/master/vsf/component/buffer/buffer.c

参考里面关于fifo的处理 ...

这个就是对循环缓冲区的操作?
点赞  2016-10-12 13:32
通过时间法接收,波特率已知的话,就可以计算出一个字节需要的时间,如果超过一个字节需要的时间,那么就认为一帧数据接收完成
stm32/LoRa物联网:304350312
点赞  2016-10-12 13:48
引用: 李嘉辉 发表于 2016-10-12 13:28
我在做这样一个模块,这个模块的一个串口接串口设备,另一个串口接wifi模块发送数据,现在是想把这个模块 ...

可以,就是串口转wifi模块嘛,能做。
亚里士缺德
点赞  2016-10-12 13:59
引用: 汤权 发表于 2016-10-12 13:59
可以,就是串口转wifi模块嘛,能做。

就是在做这个东西
点赞  2016-10-12 14:06
引用: 李嘉辉 发表于 2016-10-12 14:06
就是在做这个东西

做完求分享啊
亚里士缺德
点赞  2016-10-12 14:12
引用: 汤权 发表于 2016-10-12 14:12
做完求分享啊

才开始做呢,设计到很多算法呢,需要攻克啊
点赞  2016-10-12 17:30
引用: 汤权 发表于 2016-10-12 14:12
做完求分享啊

才开始做呢,设计到很多算法呢,需要攻克啊
点赞  2016-10-12 17:30
做个在缓存,用指针,
点赞  2016-10-12 23:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复