迪文科技论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: thefightingXin

OS程序中串口接收数据是轮询的,这样高速接收很容易丢把?

[复制链接]

9

主题

18

回帖

114

积分

注册会员

Rank: 2

积分
114
 楼主| 发表于 2019-8-16 16:52:34 | 显示全部楼层
qjhzh 发表于 2019-8-16 16:44
这个是迪文写的一个串口4使用82,83指令的os文件。这个应该不会有问题。我用串口助手测试,定时15ms发送读取 ...

就是会丢帧呀。发的帧和接的帧不等,接的帧<发的帧。
回复

使用道具 举报

0

主题

239

回帖

1804

积分

金牌会员

Rank: 6Rank: 6

积分
1804
发表于 2019-8-16 17:03:30 | 显示全部楼层


定时15ms发送,取消,在发送测试多次都没有问题。
接收帧 > 发送帧 没毛病。   

楼主是在做什么测试吗,我觉得没必要纠结这个。知道原理(DWIN OS平台下1mS可以执行1万条指令),只要处理了串口肯定没问题的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

9

主题

18

回帖

114

积分

注册会员

Rank: 2

积分
114
 楼主| 发表于 2019-8-16 17:04:19 | 显示全部楼层
qjhzh 发表于 2019-8-16 16:50
我测试定时15ms发送一直没有丢数据的情况发生。楼主其实不用纠结这个问题的。可以放心使用,应该考虑其他 ...

    你这个4753/7*9=6111,,你接到的才是6093,丢了18个字节,,就是丢了2帧呀。。
    不是纠结,这种情况在产品工作时很容易遇到呀。。
    单片机发数据给lcd,lcd没应答回复,单片机要处理这种情况呀。。而且这种没应答在接线稳定时屏幕那边是不应该出现的。
回复

使用道具 举报

9

主题

18

回帖

114

积分

注册会员

Rank: 2

积分
114
 楼主| 发表于 2019-8-16 17:14:00 | 显示全部楼层
qjhzh 发表于 2019-8-16 17:03
定时15ms发送,取消,在发送测试多次都没有问题。
接收帧 > 发送帧 没毛病。   

你算的方法不对的,,发送一帧数据是7个字节,,接收的应答数据一帧是9个字节。你截的2个图都丢帧了的。
回复

使用道具 举报

0

主题

239

回帖

1804

积分

金牌会员

Rank: 6Rank: 6

积分
1804
发表于 2019-8-16 18:19:37 | 显示全部楼层



我今天也跟楼主纠结去了,换了一个转接板测试。 10ms数据没有丢失。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

6

主题

27

回帖

109

积分

注册会员

Rank: 2

积分
109
发表于 2019-8-19 17:57:59 | 显示全部楼层
本帖最后由 过期的健康证 于 2019-8-19 17:59 编辑

串口丢数据的问题要考虑到芯片的处理能力以及上位机发送的间隔,另外还有OS中读取串口的代码效率。

举例:
  1. //每次读一个字节
  2. int size = com_data_len(COM_PORT);
  3. com_data_read(COM_PORT,&uart_rx[uart_rx_size],1) //读取数据放在缓冲区中
复制代码

  1. // 一次读n个字节
  2. int size = com_data_len(COM_PORT);
  3. com_data_read(COM_PORT,&uart_rx[uart_rx_size],size) //读取数据放在缓冲区中
复制代码



这两段代码在大数据的情况下肯定是有差异的。
回复

使用道具 举报

6

主题

27

回帖

109

积分

注册会员

Rank: 2

积分
109
发表于 2019-8-20 09:49:47 | 显示全部楼层
本帖最后由 过期的健康证 于 2019-8-20 09:52 编辑

除了优化接收代码提升接收效率以外,建议使用可靠的消息格式:消息头+长度+消息类型+数据长度.....+效验码+结束码,可根据自己的需要定义,合理的消息格式可以保证识别消息的正确性和完整性。

另外,上位机可以采取应答机制,当需要发送大数据时,需要进行分包处理,当接收到接收到一个子包后下文机发送接收完成消息,上位机在接收到该消息后才继续发送下一个子包。

理论上,串口通讯在发送小数据还是可靠的,并不需要编写太复杂的逻辑来保证可靠性,不过需要通过协议判断单个包是否接收完成。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-5 20:38 , Processed in 0.041211 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表