串口通讯BUFFER

[复制链接]
2941|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的深度来发包,但是这样的话一个包剔除握手、校验等数据以后,真正的有效数据的比例就很少了
 楼主| skky2010 发表于 2011-4-14 09:52 | 显示全部楼层
或者是这个问题是不是一个硬伤,数据包的大小就是取决于UART的buffer的深度,如果一次发送的数据的个数超过buffer的深度时肯定会丢失数据的
qin123456 发表于 2011-4-14 10:02 | 显示全部楼层
用循环方式,可以放漏。
HWM 发表于 2011-4-14 10:13 | 显示全部楼层
to 5L:

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

实在想发送长数据包,只有适当地控制发送速度。
mmax 发表于 2011-4-14 10:15 | 显示全部楼层
用接受中断处理吧。
单独开一个RAM区做缓冲,中断内只将受到的数据放到RAM缓冲中去。不做其他事情。
HWM 发表于 2011-4-14 10:19 | 显示全部楼层
中断或环形缓冲区都不是根本性的方法。如果不限制发送速度,又无长度限制,那必然撑破肚皮。
yan2005 发表于 2011-4-14 12:15 | 显示全部楼层
你说的buffer就是16bytes的FIFO吧。你想不写中断处理程序,把数据完全冲FIFO中一次性读出来吧。

还是老老实实写一个FIFO半满的中断处理程序。
 楼主| skky2010 发表于 2011-4-14 12:28 | 显示全部楼层
我要用中断的,要解决我的问题估计就要用9楼说的方法了,用握手,然后按帧发送了和接收了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

145

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部