硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2424|回复: 6
收起左侧

我一直担心DMA接收会有一定的概率掉数据

[复制链接]

4

主题

11

回帖

23

积分

新手上路

积分
23
发表于 2019-5-15 15:05:33 | 显示全部楼层 |阅读模式
假设接收的时候超时了,这个时候吧前面收到的数据取回来处理,重新开始接收,我估计它这个时候是重新配置了DMA,如果发送方间断时间非常短,串口任务优先级又低,会不会掉数据啊?如果用中断方式,反正来了以后就往FIFI里面扔,随便怎么都不会掉。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115691
QQ
发表于 2019-5-15 15:08:20 | 显示全部楼层
这就需要上层协议了,串口DMA仅仅是个底层,你上层应用可以像Modbus那样做收发控制即可
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2019-5-15 15:09:37 | 显示全部楼层
上层控制不了啊,对方什么时候发,接收方怎么知道呢?
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2019-5-15 15:12:12 | 显示全部楼层
stm32这种变态uart里面没有硬件fifo,这个串口一直都让人头痛
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115691
QQ
发表于 2019-5-15 15:12:24 | 显示全部楼层
zzgang 发表于 2019-5-15 15:09
上层控制不了啊,对方什么时候发,接收方怎么知道呢?

看来你不熟悉Modbus

简单的说就是主机给从机发送读写命令,然后返回数据,检测到3.5个以上字符间隔,此帧接收就终止了。
从机的发送都是在主机的控制下进行。
回复

使用道具 举报

4

主题

11

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2019-5-15 17:50:48 | 显示全部楼层
eric兄,我意思是它这种方式存在风险,如果做为一个通用的uart底层驱动,总不能要求上层都跑类似modbus的协议啊
回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2019-5-15 18:01:19 | 显示全部楼层
zzgang 发表于 2019-5-15 17:50
eric兄,我意思是它这种方式存在风险,如果做为一个通用的uart底层驱动,总不能要求上层都跑类似modbus的协 ...

接收到空闲中断后,不终止接收,可以继续一直接收,缓冲满了会收到一个消息,再配置使用下一个缓冲,这段切换的时间很短。
基本不会丢数据。



回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-12 04:53 , Processed in 0.312518 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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