creep 发表于 2015-6-10 17:33
如果接收数据很多的话,频繁的中断的确开销很大。
既然用DMA了,为何不用串口空闲中断+DMA呢,这就不用频繁 ...
串口空闲中断,什么时候串口有空闲呢。应该保证必须保证串口空闲中断发出之前buffer没满。
我的方法是查询DMA状态,DMA自行完成RingBuffer的功能,且无限。
当然,整个程序必须没有阻塞,或者阻塞的时间保证串口通讯肯定不会“溢出”Buffer。
条条大道通罗马,只是给出使用中断外的另一种解决方法,没有别的意思哈。
中断也没什么不好的,但一般情况下会有更需要中断的地方。
串口接收这种事情留给空闲时间即可。
每个人的用法不一样,目的一样,只不过走的路不同。
中断触发呢,
本帖最后由 creep 于 2015-6-11 09:20 编辑
lusonghua 发表于 2015-6-11 08:53
串口空闲中断,什么时候串口有空闲呢。应该保证必须保证串口空闲中断发出之前buffer没满。 ...
如果设置了串口空闲中断,那么2帧发送数据之间的间隔就会产出一次串口空闲中断。
至于buff的大小就要看你发送的数据一帧有多大了,合理设置即可。
具体情况,具体分析
学习中。。。。
lusonghua 发表于 2015-6-11 08:51
没有查询串口,是查询DMA的状态,DMA的设置自行完成了RingBuffer的功能。
串口接收的缓冲长度决定了读取R ...
那“查询DMA的状态”是否也会一直在占用CPU啊?
creep 发表于 2015-6-10 23:25
这应该是串口接收数据比较好的方法之一的,中断的方法和这个没法比。
我之前都是开一段缓存,中断接收了就往里存,然后别的程序再从缓存里取了解析