0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式开发中中断与轮询的内涵与区别

strongerHuang 来源:技术让梦想更伟大 作者:李肖遥 2021-04-30 11:51 次阅读

摸水了一周,准备在家里好好敲敲代码,赶赶稿子,正当我专心输出的时候,被老婆打断了。

娃拉臭了,赶紧过来!语气中带着一丝丝我害怕的味道。

怎么办?没办法只有过去换尿布咯,三两下,搞定!

之后,我继续开始肝,但是心想,要是娃再哭闹了,老婆是不是会骂人了?想着不行,我得去看看,于是我每隔几分钟就去瞅瞅,媳妇看到我这么用心,笑开了花!

是的,从中我也悟出了中断与轮询的味道,今天我们来看看这两者的内涵与区别。

5b28ae62-a961-11eb-9728-12bb97331649.png

中断在嵌入式开发过程中,使用到处理器的时候,中断是我们必不可少的元素。

中断的基本概念

中断是一种硬件机制,在CPU在正常运行程序的过程中,中断可以随时发生。

由预选安排或各种随机的内外部事件,一般称为中断源,发出中断请求,使CPU中断正在运行的程序,并通过将控制权传递给服务设备的中断处理程序来响应,这个过程称为程序中断。

5b38f556-a961-11eb-9728-12bb97331649.png

中断的本质

一般认为中断是外部设备向处理器发起的请求事件,这还不够彻底,中断可以说是是处理器对外开放的实时受控接口

比如计算机系统中,如果没有中断,计算机所有的程序都是定论的,我们事先就可以知道其运行的全部过程,无法交互,相当于一个加速器。

有中断后,外部服务程序可能打断当前任务。

CPU“正在执行的程序”与“随时可能发生的服务”,二者形成了异步关系,由人实时控制的中断输入,是无法预测的。

中断可以看作是一种“硬件轮询”。即本质上,CPU会通过读取外部信号来判断CPU的下一步状态。

中断处理方式

设备管理中,高速的处理器和低速的输入输出设备相对来说,会降低整体效率,为了减少程序直接控制方式中CPU的等待时间,提高系统的并行工作程度,采用中断处理方式是很有必要的。

在I/O设备中断方式下,CPU与I/O设备之间数据的传输步骤如下:

在某个进程需要数据时,发出指令启动输入输出设备,准备要处理的数据;

在进程发出指令启动设备之后,该进程放弃处理器,等待相关I/O操作完成。此时,进程调度程序会调度其他就绪进程使用处理器。

当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转向预先设计好的中断处理程序,对数据传送工作进行相应的处理。

得到了数据的进程,转入就绪状态。在随后的某个时刻,进程调度程序会选中该进程继续工作。

5b4c7162-a961-11eb-9728-12bb97331649.png

CPU是怎么知道中断发生的

举个例子,比如说键盘,按下键盘Enter键时,cpu是怎么样知道我按下了Enter键而不是Shift键呢?

首先说明cpu不会知道你按下的哪个键,cpu只会按着机器指令的执行顺序,一条一条的执行机器指令。

cpu只知道按设计好的逻辑执行指令,不管这个指令是干嘛的。

知道你按下哪个键的是操作系统,操作系统是根据中断控制器以及相应的寄存器的状态判断是不是中断。

所以当你按下一个键,这个键的地址马上被写入RAM中,同时发出中断信号,CPU获取中断信号,就会去执行中断程序。

发生中断时CPU怎么知道程序的地址?

中断产生时,程序需要跳转到某个地址去运行该段的程序,那么CPU是不是要读整个内存然后去找中断向量表呢?

不是的,不需要去读取整个内存,而是通过映射的关系。

例如在x86架构中,中断向量表的位置保存在IDTR寄存器里,CPU通过这个寄存器就能找到中断向量表,然后根据中断号就可以找到具体的中断入口了。

CPU检测到中断信号时,怎么知道是发给哪个进程的?

这个问题是我在知乎上看到的,也是极大激发我的兴趣,对我们理解中断也有极大的好处。

首先我们需要知道:中断并不直接把数据送给用户进程的,中断通知的是驱动程序,而不关心当前正在执行的是哪个进程。

而进程操作都是一样的:保存现场,进入内核,执行需要的操作,返回中断前的现场,继续进程执行。

5b6b7fe4-a961-11eb-9728-12bb97331649.png

一个系统的的中断系统通常是类似这样的组成,包括设备的中断、中断控制器、CPU的中断

设备的中断

指设备要产生一个事件来通知CPU,事件的产生的方法有很多。对设备“关中断”,指的是让这个设备停止发出中断信号,如果中断控制器已经获得这个中断信号,那么这个中断信号还是会报到CPU上的。

中断控制器

指对多个设备的中断进行采样,排队,分发的机制。对中断控制器说:关中断,是让中断控制器不要给CPU(或者上级)发送中断信号了,设备报不报信号上来,这些信号是否被排队,那是另一个问题。

CPU的中断

指CPU核上有一条中断线,当这条线加上合适的电平或者信号,CPU核就会从当前的执行上下文中,直接跳转到中断处理程序中执行。在CPU的角度上关中断,就是不要执行“跳转到中断处理程序”这个动作。

中断方式的优缺点

优点

I/O设备中断方式使处理器的利用率显著提高;

支持多道程序和I/O设备的并行操作,提高了效率。

缺点

各种各样的输入输出设备通过中断处理方式进行并行操作,使中断次数增加,会造成CPU无法响应中断;

如果在缓冲区装满数据之后发生中断。那么在数据传送过程中,发生中断的机会较多,将耗去大量的CPU处理时间。

轮询什么是轮询

轮询是一种CPU决策如何提供周边设备服务的方式。

在轮询过程中,由CPU定时发出询问,依序询问每一个周边设备是否需要其服务。

每个设备都有一个指示命令就绪的位,指示该设备的状态。

当此状态就绪即给予服务,服务结束后再问下一个周边,接着不断周而复始。

轮询方式

I/O设备的程序轮询是计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。

轮流询问之后,有要求的,则加以处理。

在处理I/O设备的要求之后,处理机返回继续工作。

5bde1e00-a961-11eb-9728-12bb97331649.png

轮询的优缺点

优点

在一些应用中可以增强了程序的实时性。。。

缺点

能处理的输入输出设备的数量也是有一定限度的。

程序轮询占用CPU的处理时间,效率较低。

中断和轮询之间的区别中断时,设备会通知CPU引起注意;而在轮询中,CPU会稳定地检查设备是否需要注意。

中断不是协议,而是一种硬件机制;轮询反之。

在中断中,该设备由中断处理程序提供服务;轮询时,该设备由CPU维修

中断可以随时发生;轮询时,CPU会以固定的间隔稳定地对设备进行投票。

在中断中,中断请求线用作指示设备需要维修的指示;在轮询时,命令就绪位用作指示,表明设备需要维修。

在中断中,一旦任何设备将其中断,处理器就会受到干扰;在轮询中,处理器通过重复检查每个设备的命令就绪位来浪费无数的处理器周期。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222141
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206544
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87595
  • 嵌入式开发
    +关注

    关注

    18

    文章

    977

    浏览量

    46957

原文标题:嵌入式开发中,选中断还是轮询方式?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发应该掌握哪些知识?

    嵌入式软件开发应该掌握哪些知识? 一、 什么是嵌入式软件? 嵌入式软件通常是指嵌入式系统运行的
    发表于 02-19 11:23

    嵌入式软件开发和软件开发区别

    之间的区别。 硬件环境和资源限制: 嵌入式系统通常运行在资源有限的嵌入式设备上,如单片机、嵌入式开发板或微控制器等。这些设备通常具有有限的处理能力、存储容量以及功耗要求。相比之下,计算
    的头像 发表于 01-22 15:27 588次阅读

    嵌入式开发学习的十三法则分享

    嵌入式开发学习是一个不断积累和总结的过程,来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的十三法则,大家不妨参考一下: 一、冗余度法则 在嵌入式系统具有足够的冗余度
    发表于 12-21 06:32

    嵌入式开发为什么需要输出调试信息?

    嵌入式开发为什么需要输出调试信息? 因为输出调试信息是嵌入式开发中一项非常重要的实践,它有助于保证软件的可靠性、稳定性和性能,也是故障排查的关键工具之一。 嵌入式开发输出调试信息主要有以下
    发表于 11-28 16:46

    c语言嵌入式开发

    电子发烧友网站提供《c语言嵌入式开发.zip》资料免费下载
    发表于 11-17 14:11 2次下载
    c语言<b class='flag-5'>嵌入式开发</b>

    嵌入式开发系统基础知识

    电子发烧友网站提供《嵌入式开发系统基础知识.pdf》资料免费下载
    发表于 11-17 10:59 0次下载
    <b class='flag-5'>嵌入式开发</b>系统基础知识

    嵌入式开发学习路线

    电子发烧友网站提供《嵌入式开发学习路线.doc》资料免费下载
    发表于 11-17 10:13 12次下载
    <b class='flag-5'>嵌入式开发</b>学习路线

    嵌入式开发学习路线分享

    的实际应用范畴,可以说目前市场上对嵌入式开发人才的需求越来越大,很多小伙伴都想通过培训学习的方式走向嵌入式开发相关的岗位。下面,小编就给各位小伙伴介绍一个简单易懂的学
    的头像 发表于 11-15 11:51 654次阅读
    <b class='flag-5'>嵌入式开发</b>学习路线分享

    嵌入式开发入门学习

    电子发烧友网站提供《嵌入式开发入门学习.doc》资料免费下载
    发表于 10-26 09:37 1次下载
    <b class='flag-5'>嵌入式开发</b>入门学习

    Linux系统的嵌入式开发是什么

    嵌入式开发听起来很高大上,但其实它就在我们身边。   嵌入式开发是指将操作系统、应用程序或数据存储在嵌入式设备中,如手机、平板电脑、智能家居等。   随着物联网时代的到来,嵌入式开
    的头像 发表于 10-12 15:40 1025次阅读

    什么是嵌入式Linux?

    发展需要不断进化。随着芯片性能的增强和社会变革的需要,嵌入式系统越来越承接更多、更复杂的功能,所以嵌入式开发也以高薪稳定的状态稳坐在就业的顶端。(相较于其他行业,嵌入式工程师的工资在同等毕业条件下确实可观!这还
    发表于 10-11 13:47

    基于树莓派的嵌入式Linux开发教学

    树莓派对于全球嵌入式 Linux 开发及教育已经并将继续带来广泛的影响,及早将之引入我国主流的嵌入式开发与教学环境或将是有益的。尽管传统的 “ARM
    发表于 09-21 07:09

    STM32嵌入式开发中的RTOS,你用过哪些?

    STM32嵌入式开发中的RTOS,你用过哪些?
    的头像 发表于 09-18 16:21 816次阅读
    STM32<b class='flag-5'>嵌入式开发</b>中的RTOS,你用过哪些?

    什么人适合学习嵌入式开发

    到底什么专业的人适合学嵌入式?或从事过自动化相关工作的人员,适合参加嵌入式学习吗?等等系列问题,接下来就问大家一一解答:究竟什么样的人才适合学习嵌入式开发嵌入式简单来讲,就是软硬
    发表于 06-07 15:55

    嵌入式开发成本高的原因有哪些

    这里先问下大家:你觉得嵌入式开发成本高吗? 答案:是的,对于普通人来说,很高。当然,部分富豪除外。 下面给大家罗列一下嵌入式开发成本高的几点原因。
    的头像 发表于 06-02 10:24 606次阅读
    <b class='flag-5'>嵌入式开发</b>成本高的原因有哪些