• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

串行通信中的三种方式:轮询,中断,DMA

lygo 2017-09-06 浏览量:9228

请问下STM32串行通信的三种方式:轮询,中断,DMA ,这三种方式的概念以及优缺点是什么?应用场景又是啥?之前用51 和32 写过中断的,但是轮询和DMA 不是很了解,望大家回答,谢谢!!

还有51也可以用轮询和DMA(好像没DMA 吧)吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1、轮询就是你隔多长时间去查看一次他有没有数据,如果有则动作,而这个时间间隔可能会加长,也可能正常,因为这途中执行程序也许会有堵塞,这就是轮训的缺点,效率太低,占用cpu时间。

    2、中断:不用去管他,事件产生了则去取数据。

    3、dma设置好了以后有数据产生则自动把数据取出。


    51没有dma,51只有轮训和中断。

    • 发布于 2017-09-06
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:6
  • (1)轮询(Polling) 
    很多I/O设备都有一个状态寄存器,用于描述设备当前的工作状态,每当设备状态发生改变时,设备将修改相应状态寄存器位。通过不断查询设备的状态寄存器,CPU就可以了解设备的状态,从而进行必要的I/O操作。为了节约CPU资源,查询工作往往不是连续的,而是定时进行。 
    轮询方式具有简单、易实现、易控制等优势,在很多小型系统中有大量应用。对那些实时敏感性不高、具有大量CPU资源的系统来说,轮询方式有很广泛的应用。最典型的用途就是在那些任务比较单一的单片机上,嵌入式系统中也有应用。 
    轮询的一种典型的实现可能是这样的:while(TRUE){// select(,,timeout); //};当然这里的select()也可以使用poll()替换。 
    轮询方式主要存在以下不足: 
    <1>增加系统开销。无论是任务轮询还是定时器轮询都需要消耗对应的系统资源。 
    <2>无法及时感知设备状态变化。在轮询间隔内的设备状态变化只有在下次轮询时才能被发现,这将无法满足对实时性敏感的应用场合。 
    <3>浪费CPU资源。无论设备是否发生状态改变,轮询总在进行。在实际情况中,大多数设备的状态改变通常不会那么频繁,轮询空转将白白浪费CPU时间片。 
    (2)中断(Interrupt) 
    中断,顾名思义,就是打断正在进行中的工作。中断不需要处理器轮询设备的状态,设备在自己发生状态改变时将主动发送一个信号给处理器(PIC),后者在接收到这一通知信号时,会挂起当前正在执行的任务转而去处理响应外设的中断请求。中断通知机制通过硬件信号异步唤起处理器的注意,解决了外部设备与处理器之间速度不匹配导致的资源浪费问题。 

    现代设备绝大多数采用中断的方式与处理器进行沟通,因此设备驱动程序必须能够支持设备的中断特性。处理器在中断到达时会根据不同的中断号找到对应设备(IRR),并对中断请求进行响应处理。中断处理例程ISR(Interrupt Service Routine)由设备驱动程序提供,并在设备驱动模块初始化时注册到系统中断向量表中。从设备发出中断信号,到处理器最终调用ISR进行处理,期间会经过很多步骤,这个过程构成了中断处理框架。中断处理框架包括了进入ISR之前的很多进入路径(entry path),例如MIPS下要经历这样几个步骤:设置或屏蔽相关寄存器;进入异常入口点取指;现场保护;异常分类(MIPS下中断也是一种异常)处理;查找中断向量表路由ISR。不同的操作系统对中断处理框架的设计不尽相同,但是要达到的目的是一样的,那就是最终调用用户注册的设备ISR。


    DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。


    以上内容来自网络​

    • 发布于2017-09-06
    • 举报
    • 评论 1
    • 1
    • 0
lygo 回复了 嗯哪在这儿 :谢谢!但是我想要更通俗易懂的 回复

  • 一、
    轮询:就是在main函数的while中,循环查询串口的状态寄存器,当收到数据时再去处理。要不断的去查询状态寄存器,浪费时间。
    中断:没有收到数据时,执行其他的程序,收到数据后,进入中断处理通讯。与轮询相对,不用循环查询状态寄存器,可以有更多的时间运行其他程序。
    DMA:串口数据的接收与发送由DMA处理,DMA也可以分为轮询与中断方式。数据的发送与接收都不用CPU干预,通过DMA进行。CPU有更多的时间运行其他程序。

    二、
    51没有DMA,只有轮询与中断两种方式。
    32可以用所有的方式。

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 1
    • 0

  • 轮询、中断、DMA的定义之前的回答已经描述得很详细了,我提供一个参考链接吧,可以参考一下,很详细,优缺点都有介绍

    http://blog.csdn.net/ZengNovak/article/details/45081587

    另外,51单片机是没有DMA的,没带有DMA,STM32中有DMA,轮询的话会占用CPU的处理时间,个人建议深入学习中断和DMA,DMA用到的场景很多

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 1
    • 0

  • 1. 轮询是阻塞式程序,是最浪费时间的。CPU不干其他的活了,总是在那里查询,等待。

    2.中断和DMA类似,都可以启动之后,让CPU去干别的,等待发送或者接收完成中断到来进行下一步处理。

    3.如果是stm32单片机,每发送一个数据,中断来临之后发送下一个数据,也是要频繁进中断处理函数。

    3.DMA有的优点是你可以把一段发送缓冲区的首地址告诉DMA,开始发送之后,就不用管了,DMA会给你一个个全不发送出去。

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 1
    • 0

  • 轮询就是在main函数中主动发送数据呀,如果接受用轮询来做,就是每隔一段时间检查标志位,看下有没有数据进来。

    DMA方式类似于中断,但和中断不一样,因为一接收到数据就被DMA送到指定的位置去了,或者往指定位置更新数据,DMA就有空就主动把更新的数据发到发送寄存器。

    DMA和中断都可以让串口运行更有效率,不用一直等待或者查询,就像是把数据丢给另一个助手,让助手适时处理。

    51单片机没有DMA功能,但是可以用中断功能实现串口。

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 先说说轮询、中断、DMA的区别

    ①DMA(DIRECT MEMORY ACCESS)
    即直接存储器存取,是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。 
    要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。 

    ②中断
    是由CPU通过中断服务程序来传送,每次要保护断点,保护现场需要多条指令,每条指令要有取指和执行时间。为了充分利用CPU的高速性能和实时操作的要求,一般中断服务程序要求是尽量的简短,所以当要实现大量数据交换的情况,如从磁盘调入程序或图形数据,如果采用中断传送方式,必然会引起频繁中断的情况,需要执行很多与数据传送无关的中断指令,所以会大大降低系统的执行效率,无法提高数据传送速率。对于一个高速I/O设备,以及批量交换数据的情况,只能采用DMA方式,才能解决效率和速度问题。DMA在外设与内存间直接进行数据交换,而不通过CPU,这样数据传送的速度就取决于存储器和外设的工作速度。

    ③查询方式(轮询)

    主要用于CPU不太忙且传送速度不高的情况下。无条件传送方式作为查询方式的一个特例,主要用于对简单I/O设备的控制或CPU明确知道外设所处状态的情况下。 


    中断方式:主要用于CPU的任务比较忙的情况下,尤其适合实时控制和紧急事件的处理 
    DMA方式(直接存储器存取方式):主要用于高速外设进行大批量数据传送的场合。
    ◆中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理
    ◆DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,大大减少了CPU进行中断处理的次数
    ◆中断方式的数据传送是由设备到CPU再到内存,或者相反。
    ◆DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。

    这里是使用实例代码http://bbs.21ic.com/icview-1245612-1-1.html

    引自网络,借花献佛,希望对你有所帮助,谢谢

    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

串行通信中的三种方式:轮询,中断,DMA