ARM基础(3) 异常处理

比如手机正常往下运行,执行过程中突然来了一个突发得事件, 比如说一个电话进来了,打断当前程序执行, 比如你正在玩游戏, 打完电话,你再回来接着玩游戏, 异常拿来处理我们软件能够处理应对突发事件得一种机制,异常处理在整个嵌入式底层开发当中必不可少的, 我们很多产品外面都会接到很多CPU上面, ,我们怎么去处理设备能够直接响应,应对突发事件的 一种机制比如说我们在处理一件事情, 突然 间起火了,...
摘要由CSDN通过智能技术生成

比如手机正常往下运行,执行过程中突然来了一个突发得事件, 比如说一个电话进来了,打断当前程序执行, 比如你正在玩游戏, 打完电话,你再回来接着玩游戏, 异常拿来处理我们软件能够处理应对突发事件得一种机制,

异常处理在整个嵌入式底层开发当中必不可少的, 我们很多产品外面都会接到很多CPU上面, ,我们怎么去处理设备能够直接响应,

应对突发事件的 一种机制

比如说我们在处理一件事情, 突然 间起火了, 你肯定不能正常做事情了, 你要跑出去, 停电了,或者来了一个电话了, 你都要打断现在正在处理的事情,去处理突发的事情 ,

中断 : 假如当前 有一个程序比如手机程序正在执行, 突然一个电话进来了, 那这个时候怎么办, 肯定会打断你, 然后执行接电话的动作, 处理完之后再回来 接着往下执行. 中断的 处理过程也就是类似异常的处理过程, 一般都是由外部设备触发,

软中断 : 软件产生的中断, 也就是它不是由外面的硬件设备产生的中断, 是我们开发者通过软件运行来模拟一个外部中断的产生, 它主要用在系统调用上. 嵌入式产品软件分为, 应用层,内核层, 硬件层 .
在这里插入图片描述在这里插入图片描述
复位 : 手机power键 , 比如手机死机了, 按power键复位一下 , 按复位键的时候 是打断当前执行程序让你不能正常执行, 属于异常的一种,
未定义指令 : 程序执行过程中 遇到不能识别的指令肯定报异常不能正常往下执行,

数据异常 : 程序执行过程中 我们肯定要访问一些数据 , 比如说我们再内存里面再硬盘里面某一个文件,在访问过程中出现 异常, 比如说数据越界, 数据获取不到了,

数据访问不到了, 我们跳到数据异常, 指令识别不了了,我们跳到未定义指令异常,

中断异常处理过程 :
具体落实到硬件是怎么实现得 ?
在这里插入图片描述

手机为例 , 手机里有CPU ,手机在打电话得时候有一个通信模块, 电话模块,当外面有人打个电话进来得时候, 这个通信模块不断得去接收这个信号, 接收到这个信号之后他会, 他肯定有一个"管脚" 接到CPU上, 假如CPU当前正在运行一个软件, 比如浏览一个网页, 然后电话来了 马上就要打断当前得程序, 跳过去接电话, 接完电话之后回来接着往下执行, CPU得核要接收到外部得某些设备发出得硬件信号得话肯定有一个"管脚", 两个中断"管脚"来接收外面得中断信号, 一个是普通得中断nlRQ, 一个是快速中断nFIQ, 我们得这个设备外面不止有通信模块可能还有我们得传感器, 传感我们得手机玩游戏得摇晃, WIFI 这也是一个通信模块,它也有可能发中断信号得, 等别的一些设备, 一两个"管脚" 肯定搞不定, 怎么办 ? CPU外面要接多个中断得话 , 接多个设备得话, 要用一个中断控制器, 目的是要我们可以接多个中断源, 假如说一个设备就是一个中断源, 可以接多个中断源,

假如接到得是一个按键得话, 按键按下 打断你,做相应得处理,按键触发, , 也就是按下过后当前程序就被打断了, 去进行别得操作 .这里涉及到一个中断得信号怎么去产生, 中断就是执行得程序执行过程中会被突然打断, , 突然打断得这个信号怎么产生 ? 信号产生过后你怎么去进入到CPU得内部, 进来过后,你怎么打断当前得应用程序, 怎么跳到对应得中断得处理程序, 处理完后怎么回来 ? 等等这些过程,

首先我们怎么知道中断有没有来, 比如按键, 按下默认这个"管脚" 可能接一个电阻,能接到得是我们得一个电源,默认这个"管脚"是上拉得 ,当按键按下过后, 它就变成低电频了, 我们可以把这个"管脚"得电频,高电频变低电频, 作为一种触发方式 , 接到我们得CPU里面 . 来触发
触发方式有几种 :
一种是 : 电频触发, 高电频中断来还是低电频中断来, 或者 高电频变成低电频得瞬间 ,低电频变成高电频得瞬间, 作为中断信号得一个判断,
通过"管脚" 电频做判断, CPU收到信号 做什么事情 ? CPU之前你在按键触发得时候模拟一个电话来了, 也是通过改变链接CPU得这个 “管脚” 来表示我们信号来了, 信号进来过后, 假设我们CPU正在运行一个应用程序 , 信号是随机得, 随机打断当前程序 , 跳到执行我们得IRQ中断处理程序,中断处理程序类似一个函数,就是完成一些事情 ,比如说电话通讯, 中断程序处理完之后接着, 要回来.回到原来打断得地方接着往下执行,这是一个大概中断得过程, 信号得触发,然后打断当前应用程序, 然后处理中断处理程序,然后回来.

你打断过后, 你要能回来接着执行得话, 你会遇到什么问题, 当一个程序执行过程中 , CPU内部是有很多寄存器得,你要打断运行中断处理程序,打断得话,当前程序执行过程中它是 有一些算法, 加法运算或者减法运算,执行过程中寄存器里面是不是保存了当前运算得值, 你打断过后, 你再处理中断处理程序, 处理过程中是不是有可能改变 这些寄存器得值 ,如果改变了再回来得话是不是不能接着执行了, 这就涉及到一个问题, 你怎么保护回来过后跟原来得值都是一样得, 保护原来得数据不被破坏, 这个叫现场得一个保护 , 现场保护 . 处理完之后, 回来恢复现场,把原来寄存器得值恢复回去,然后跳到原来得位置接着往下执行 .
我们中断信号处理过程中 : 假设中断信号产生了, CPU正在处理别得程序我们可以打断, 如果它正在处理别的中断呢 ? 和中断平级得, 或者更高于这个中断得正在处理, 你得这个中断就得不到执行了, 得不到执行会出现什么情况? 当高于你得中断执行完之后回来,你得中断信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值