打印

关于串口接收双缓冲区的问题

[复制链接]
2977|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2018-8-31 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近串口接收想做一个双缓冲,也是从网上学习来的,说是乒乓缓冲。buff1存满了存到buff2,然后可以处理buff1。然后我有几个疑问:
1.是不是一定要存满了再处理?
2.如果一个buff是存满了再处理,那么如果每一条报文长度不固定,会出现一条报文的前半段在buff1,后半段要存到buff2?怎么办?

然后我就想到了另一种环形缓冲区,好像还不错。
我现在的nbiot通信,在中断内接收数据,一个报文有时候会分两段收到,会进两次中断,如果我在出中断之前置标志位,表示有消息,在主函数进行处理,就会对半段数据进行处理,然后清零,就出错了。
所以我现在只能在标志位触发后,再等一会儿,delay一会儿,如果还有数据就会进入中断继续接收。delay后再处理,倒也没什么问题,但是总觉得方法太土。

请问这个数据收发和处理有什么好方法,求指点。@dirtwillfly @m564522634 @xyz549040622

相关帖子

沙发
dirtwillfly| | 2018-8-31 14:51 | 只看该作者
只要能满足你的需求,不用拘泥于控制模式的。
不清楚你用的哪个型号的mcu,用dma应该就可以满足你的需求

使用特权

评论回复
板凳
xyz549040622| | 2018-8-31 16:58 | 只看该作者

使用特权

评论回复
评论
caijie001 2018-8-31 19:33 回复TA
别别别,我是一只小菜鸟 
地板
Prry| | 2018-9-9 20:51 | 只看该作者
其实就是两个环形缓冲区。如果是裸机编程,一个缓冲区就够了,如果带操作系统,串口驱动层会有个缓冲,上层应用根据数据量大小,来决定是否增加缓存。

使用特权

评论回复
5
aspoke| | 2018-9-14 16:06 | 只看该作者
DMA双缓冲区?

使用特权

评论回复
6
232321122| | 2018-9-14 16:07 | 只看该作者
这个只能使用fifo的

使用特权

评论回复
7
ghuca| | 2018-9-14 16:07 | 只看该作者
这个应该有其他的芯片吧。

使用特权

评论回复
8
soodesyt| | 2018-9-14 16:08 | 只看该作者
乒乓缓冲是做视频处理用的。

使用特权

评论回复
9
mnynt121| | 2018-9-14 16:08 | 只看该作者
就是数组就可以。

使用特权

评论回复
10
plsbackup| | 2018-9-14 16:08 | 只看该作者
这个数据量多大呢:

使用特权

评论回复
11
kmzuaz| | 2018-9-14 16:09 | 只看该作者
环形缓冲区需要使用数据结构。

使用特权

评论回复
12
qiufengsd| | 2018-9-14 16:09 | 只看该作者
环形缓冲只能是覆盖一些数据的。

使用特权

评论回复
13
wengh2016| | 2018-9-14 16:10 | 只看该作者
这个长度还不一样吗?

使用特权

评论回复
14
uiint| | 2018-9-14 16:10 | 只看该作者
要不就做一个双核的处理器。

使用特权

评论回复
15
wengh2016| | 2018-9-14 16:10 | 只看该作者
楼主需要多大的数据?

使用特权

评论回复
16
aspoke| | 2018-9-14 16:10 | 只看该作者
用的是什么芯片呢?

使用特权

评论回复
17
qiufengsd| | 2018-9-14 16:10 | 只看该作者
楼主还是是乒乓操作吧。

使用特权

评论回复
18
232321122| | 2018-9-14 16:10 | 只看该作者
缓冲区没有使用过。

使用特权

评论回复
19
kmzuaz| | 2018-9-14 16:10 | 只看该作者
使用链表实现。

使用特权

评论回复
20
ghuca| | 2018-9-14 16:10 | 只看该作者
BUFF不知道效果怎么样

使用特权

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

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝