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

    文章

    19317

    浏览量

    230083
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10873

    浏览量

    212047
  • 数据
    +关注

    关注

    8

    文章

    7067

    浏览量

    89127
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1031

    浏览量

    47599

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

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

收藏 人收藏

    评论

    相关推荐

    哪些专业适合学习嵌入式开发?

    哪些专业适合学习嵌入式开发? 在传统行业不断被取代的当下,对于大学生、从业者而言,选择一个热门主流的职业方向,是未来发展的关键因素之一。 嵌入式作为当下高薪岗位之一,转行、转专业的人群已经占据求职
    发表于 01-03 13:44

    嵌入式开发必备-RK3562演示Linux常用系统查询命令(上)触觉智能出品

    实用干货!嵌入式开发学习必备-RK3562演示Linux常用系统查询命令(上)关注触觉智能持续为大家带来更多嵌入式开发内容
    的头像 发表于 12-31 10:51 104次阅读
    <b class='flag-5'>嵌入式开发</b>必备-RK3562演示Linux常用系统查询命令(上)触觉智能出品

    如何使用 RISC-V 进行嵌入式开发

    RISC-V是一种开源的指令集架构(ISA),它允许任何人设计、制造和销售基于RISC-V的处理器,这为嵌入式开发提供了极大的灵活性和创新空间。以下是使用RISC-V进行嵌入式开发的基本步骤: 一
    的头像 发表于 12-11 17:32 555次阅读

    基于Xilinx ZYNQ7000 FPGA嵌入式开发实战指南

    电子发烧友网站提供《基于Xilinx ZYNQ7000 FPGA嵌入式开发实战指南.pdf》资料免费下载
    发表于 12-10 15:31 2次下载

    零基础嵌入式开发学习路线

    嵌入式开发”没有接触过的同学可能会不明觉厉,但是只要你了解了,感兴趣并且有一个正确的学习路线的话,零基础也能入门。给大家介绍一个简单易懂的学习路线,让你能够从零开始学习嵌入式开发。 第一步:掌握
    发表于 10-25 15:55

    嵌入式开发常见问题排查

    嵌入式开发问题排查很多人认为嵌入式开发很难,主要是因为在这个过程中常常会遇到各式各样的问题。这些问题的复杂性和多样性使得许多人感到困惑和无所适从。然而,如果将这些问题逐一拆解,实际上大部分都可以
    的头像 发表于 09-22 08:04 350次阅读
    <b class='flag-5'>嵌入式开发</b>常见问题排查

    【「ARM MCU嵌入式开发 | 基于国产GD32F10x芯片」阅读体验】+书籍整体概况

    一、导言 上周收到《ARM MCU嵌入式开发 | 基于国产GD32F10x芯片》书籍,该纸质书籍内容可谓是面面俱到,由“清华大学出版社”出版,印刷第1版时间为2024年6月份,总共464千字
    发表于 08-25 22:48

    聚焦嵌入式开发的合规性工具、项目管理工具、版本迭代工具应用

    ,就嵌入式开发与管理领域的最新趋势、工具选择以及DevSecOps实践应用等方面展开了深入探讨。 本期对话龙智资深DevSecOps顾问徐晨晖, 分享嵌入式开发的合规性工具、项目管理和版本管理的工具选择,以及DevSecOps
    的头像 发表于 07-29 15:15 568次阅读

    嵌入式开发前景怎么样?

    嵌入式开发前景非常广阔,这主要得益于物联网、人工智能、大数据等技术的快速发展,以及嵌入式系统在各个领域的广泛应用。以下是对嵌入式开发前景的详细分析
    的头像 发表于 07-10 09:00 2751次阅读
    <b class='flag-5'>嵌入式开发</b>前景怎么样?

    嵌入式开发者的未来

    嵌入式系统的就业方向非常广泛,涵盖了许多不同的行业和领域。以下是一些常见的嵌入式系统就业方向:消费电子产品:这包括智能手机、平板电脑、智能电视、智能家居设备等。嵌入式系统工程师可以参与设计、
    的头像 发表于 06-23 08:10 385次阅读
    <b class='flag-5'>嵌入式开发</b>者的未来

    嵌入式开发就业前景怎么样?

    嵌入式开发就业前景怎么样?随着科技的飞速发展,嵌入式开发在各个领域的应用越来越广泛,因此嵌入式开发的就业前景也备受关注。今天将从智能家居、医疗设备、工业控制、汽车电子、航空航天等方面,探讨嵌入
    发表于 06-07 14:51

    ARM Cortex-A53嵌入式开发平台Android手册

    电子发烧友网站提供《ARM Cortex-A53嵌入式开发平台Android手册.pdf》资料免费下载
    发表于 04-28 15:10 0次下载

    fpga是嵌入式开发

    FPGA(现场可编程门阵列)与嵌入式开发之间确实存在一定的关联,但它们在本质上是两个不同的领域。
    的头像 发表于 03-15 14:18 1062次阅读

    fpga与嵌入式区别 嵌入式和fpga开发有什么关系

    fpga与嵌入式区别 FPGA与嵌入式系统在设计和应用上存在一些关键的区别,具体如下: 灵活性:FPGA具有高度的灵活性,可以根据需要重新编程以实现不同的功能。而
    的头像 发表于 03-14 17:04 6923次阅读

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

    嵌入式软件开发和软件开发是两个不同的概念,它们在一些关键方面有着明显的区别嵌入式软件开发是指
    的头像 发表于 01-22 15:27 2334次阅读