打印

串口通讯BUFFER

[复制链接]
1975|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skky2010|  楼主 | 2011-4-14 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家一下,我的单片机的UART的buffer为16个字节,如果上位机发送超过16个字节的数据有没有什么方式,能够让单片机完全接收,谢谢!

相关帖子

沙发
HWM| | 2011-4-14 09:38 | 只看该作者
re LZ:

必须有“握手”协议,否则数据就可能丢失。

使用特权

评论回复
板凳
McuPlayer| | 2011-4-14 09:47 | 只看该作者
最笨的办法,发送的时候慢点,比如每发送1个字节休息1秒钟
合理的办法就是做协议,用握手,如HWM所言

使用特权

评论回复
地板
skky2010|  楼主 | 2011-4-14 09:49 | 只看该作者
是需要握手的,我怕的是我的一个数据包的数据量超过了UART模块的buffer的时候数据就丢失了,有什么好的办法吗?我想的是按照的buffer的深度来发包,但是这样的话一个包剔除握手、校验等数据以后,真正的有效数据的比例就很少了

使用特权

评论回复
5
skky2010|  楼主 | 2011-4-14 09:52 | 只看该作者
或者是这个问题是不是一个硬伤,数据包的大小就是取决于UART的buffer的深度,如果一次发送的数据的个数超过buffer的深度时肯定会丢失数据的

使用特权

评论回复
6
qin123456| | 2011-4-14 10:02 | 只看该作者
用循环方式,可以放漏。

使用特权

评论回复
7
HWM| | 2011-4-14 10:13 | 只看该作者
to 5L:

如果UART一次发送的数据超过接收端的缓冲深度,逻辑上就可能丢失数据。可能性多大,取决于发送和接收处理的匹配速度。为了保证不发生丢失数据的情况,只有限制发送长度,使其不超过接收端的缓冲深度。

实在想发送长数据包,只有适当地控制发送速度。

使用特权

评论回复
8
mmax| | 2011-4-14 10:15 | 只看该作者
用接受中断处理吧。
单独开一个RAM区做缓冲,中断内只将受到的数据放到RAM缓冲中去。不做其他事情。

使用特权

评论回复
9
HWM| | 2011-4-14 10:19 | 只看该作者
中断或环形缓冲区都不是根本性的方法。如果不限制发送速度,又无长度限制,那必然撑破肚皮。

使用特权

评论回复
10
yan2005| | 2011-4-14 12:15 | 只看该作者
你说的buffer就是16bytes的FIFO吧。你想不写中断处理程序,把数据完全冲FIFO中一次性读出来吧。

还是老老实实写一个FIFO半满的中断处理程序。

使用特权

评论回复
11
skky2010|  楼主 | 2011-4-14 12:28 | 只看该作者
我要用中断的,要解决我的问题估计就要用9楼说的方法了,用握手,然后按帧发送了和接收了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

145

帖子

1

粉丝