lusonghua 发表于 2015-6-11 08:53:21

creep 发表于 2015-6-10 17:33
如果接收数据很多的话,频繁的中断的确开销很大。
既然用DMA了,为何不用串口空闲中断+DMA呢,这就不用频繁 ...

串口空闲中断,什么时候串口有空闲呢。应该保证必须保证串口空闲中断发出之前buffer没满。

lusonghua 发表于 2015-6-11 08:55:29

我的方法是查询DMA状态,DMA自行完成RingBuffer的功能,且无限。
当然,整个程序必须没有阻塞,或者阻塞的时间保证串口通讯肯定不会“溢出”Buffer。

lusonghua 发表于 2015-6-11 08:58:46

条条大道通罗马,只是给出使用中断外的另一种解决方法,没有别的意思哈。
中断也没什么不好的,但一般情况下会有更需要中断的地方。
串口接收这种事情留给空闲时间即可。

发表于 2015-6-11 09:01:57

每个人的用法不一样,目的一样,只不过走的路不同。

qiu-368230 发表于 2015-6-11 09:13:00

中断触发呢,

creep 发表于 2015-6-11 09:19:28

本帖最后由 creep 于 2015-6-11 09:20 编辑

lusonghua 发表于 2015-6-11 08:53
串口空闲中断,什么时候串口有空闲呢。应该保证必须保证串口空闲中断发出之前buffer没满。 ...
如果设置了串口空闲中断,那么2帧发送数据之间的间隔就会产出一次串口空闲中断。
至于buff的大小就要看你发送的数据一帧有多大了,合理设置即可。

stary666 发表于 2015-6-11 09:33:33

具体情况,具体分析

HenryChen 发表于 2015-6-11 10:15:10

学习中。。。。

moyanming2013 发表于 2015-6-11 16:52:54

lusonghua 发表于 2015-6-11 08:51
没有查询串口,是查询DMA的状态,DMA的设置自行完成了RingBuffer的功能。
串口接收的缓冲长度决定了读取R ...

那“查询DMA的状态”是否也会一直在占用CPU啊?

dsjsjf 发表于 2015-6-11 22:10:21

creep 发表于 2015-6-10 23:25
这应该是串口接收数据比较好的方法之一的,中断的方法和这个没法比。

我之前都是开一段缓存,中断接收了就往里存,然后别的程序再从缓存里取了解析
页: 1 [2] 3 4
查看完整版本: 如果可能,别再用中断接收串口数据了