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

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

3天内不再提示

处理器中异常和中断解决

单片机匠人 来源:张飞实战电子 作者:黄忠老师 2021-10-12 17:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

异常是能够引起程序流偏离正常流程的事件,当异常发生时,正在执行的程序就会被挂起,处理器转而执行一块与该事件相关的代码(异常处理)。事件可以是外部输入,也可以是内部产生的,外部产生的事件通常被称作中断或中断请求(IRQ)。几乎所有的现代处理器都支持异常和中断,微控制器的中断可以由片上外设或软件产生。由此可见,通常我们处理的中断是异常的一种。

每种异常类型都有对应的优先级,有些异常的优先级是固定的,有些是可编程的。

先说几个概念:

1、不可屏蔽中断(NMI)

NMI同IRQ类似,只是它不能被禁止,并且优先级仅次于复位,它对于工业控制和汽车之类的高可靠性系统非常有用。根据微控制器设计的不同,NMI可以用于掉电处理,也可以连接到看门狗单元,以便在系统停止响应时将系统复位。由于NMI不能被控制寄存器禁止,其响应的及时性就得到了保证。

2、硬件错误

硬件错误异常用于处理程序执行时产生的错误,这些错误可以是试图执行未知的操作码、总线接口或存储器系统的错误,也可以是试图切换至ARM状态之类的非法操作。

3、SVC(请求管理调用)

SVC指令执行时就会产生SVC异常,其通常用在具有操作系统的系统中,为应用程序提供了访问系统服务的入口。

4、PendSV(可挂起的系统调用)

PendSV是用于带OS(操作系统)的应用程序的另外一个异常,SVC异常在SVC指令执行后会马上开始,PendSV在这点上有所不同,它可以延迟执行,在OS上使用PendSV就要确保高优先级任务完成后才执行系统调度。

5、系统节拍

NVIC中的SysTick定时器为OS应用可以利用的另外一个特性。几乎所有操作系统的运行都需要上下文切换,而这一过程通常需要依靠定时器产生定时中断来完成。

6、中断

中断信号可以连接到片上外设,也可以通过IO端口连接到外部中断源上。外部中断只有在使能后才能使用,如果中断被禁止了,或者处理器正在运行另外一个相同或更高优先级的异常处理,则该中断请求会被存储在挂起状态寄存器中。当高优先级的中断处理完成或返回后,挂起的中断请求才可以执行。NVIC能够接受的中断请求信号可以是高逻辑电平,也可以是中断脉冲。应该注意的是,在微控制器的外部接口中,外部中断信号可以是高电平也可以是低电平,或者可以通过编程配置。

异常的处理流程:

1、接受异常请求

处理器要接受一个异常,需要满足的条件:

①对于中断和SysTick中断请求,中断必须使能

②处理器正在执行的异常处理的优先级不能相同或更大

③中断屏蔽寄存器没有屏蔽掉异常

特别注意一点:对于SVC异常,如果用到SVC指令的异常处理的优先级与SVC异常本身相同或更大,这种情况就会引起硬件错误异常处理的执行。

2、压栈和出栈

为了使被中断的程序能正确继续执行,在程序切换至异常处理前,处理器当前状态的一部分应该被保存。不同架构处理器的处理方法不同,有的采用硬件自动处理的方法来备份和恢复处理器状态,看需求,有的是需要程序中增加软件处理过程。

异常处理过程执行到最后时,将会利用执行特殊值来触发异常返回机制。处理器还会查看当前是否还有其他异常需要处理,如果没有,处理器就会恢复之前存储在栈空间的寄存器值,并继续执行中断前的程序。

自动保存和恢复寄存器内容的操作被称为“压栈”和“出栈”,这种机制使得异常处理可以跟普通的C函数一样处理,同时也减小了软件开销以及回路大小,因此也降低了系统的功耗。

3、异常返回指令

根据处理器的不同中断处理返回有的需要特殊指令,一般都是普通的返回指令,加载到PC中的数值则会触发异常返回,这样就使得异常处理可以和普通的C函数一样使用。

两个不同的指令可以用于异常返回:

BX 《Reg》q ;将寄存器中的值加载到PC中

POP {《Reg1》,《Reg1》,。..,PC} ;POP指令,PC也是更新的寄存器之一

当其中一个指令执行,异常返回机制就会启动。

4、末尾连锁

如果当其他的异常处理完成后,还有异常处于挂起状态,这时处理器不会返回到中断前的程序,而是重新进入异常处理流程,这也被称作末尾连锁。当末尾连锁发生时,处理器不必马上恢复栈的值,因为如果这么做的话还得重新压栈。异常的末尾连锁降低了异常处理的开销,因此也提高了能耗效率。

责任编辑:haq

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

    关注

    31

    文章

    5619

    浏览量

    130410
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74376
  • 异常
    +关注

    关注

    0

    文章

    23

    浏览量

    9527

原文标题:异常和中断

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK806中断处理流程深度解析:从架构到调试实战

    RK806 作为瑞芯微主流 PMIC(电源管理芯片),其中断机制是实现“电源键响应、电压异常保护、休眠唤醒、 watchdog 超时处理” 等核心功能的基础。Linux 驱动基于regmap_irq框架设计,屏蔽了底层寄存
    的头像 发表于 02-05 13:46 2320次阅读
    RK806<b class='flag-5'>中断</b><b class='flag-5'>处理</b>流程深度解析:从架构到调试实战

    MAXIM 纳米功耗微处理器监控电路:设计与应用指南

    MAXIM 纳米功耗微处理器监控电路:设计与应用指南 在电子设备的设计,微处理器(µP)的稳定运行至关重要。电源波动、软件故障等因素都可能导致微处理器出现
    的头像 发表于 01-29 17:15 720次阅读

    Cortex-M3工作模式及异常

    一、工作模式 线程模式和手柄模式。 当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。 二、异常
    发表于 01-20 08:24

    Cortex-M0 处理器介绍

    Cortex-M0 处理器简介ARM公司的Cortex-M0应用于各种微控制(MCU),并可让研发工程师以8位的价位创造32位的的效能,并将传统的8位和16位的处理器升级到更高效、
    发表于 01-16 08:04

    CW32F030中断解析

    中断 1 概述 ARM® Cortex®-M0+ 内核的嵌套向量中断控制器 (NVIC),用于管理中断异常。NVIC 和处理器内核紧密相连
    发表于 01-12 08:41

    RISC-V异常中断机制全解析

    RISC-V 作为开源、模块化的精简指令集架构,其异常中断机制是保障系统可靠运行、响应外部事件与处理内部错误的核心支撑。
    的头像 发表于 12-28 14:41 1976次阅读
    RISC-V<b class='flag-5'>异常中断</b>机制全解析

    深入剖析ARM64异常处理:开发者必须掌握的底层核心逻辑

    与软件的协同操作逻辑,都是开发者必备的核心能力。今天我们就深度拆解ARM64异常处理机制,同时聊聊 开发者为何必须关注这一技术点 。 一、异常发生后,CPU的自动操作细节 当ARM64处理器
    的头像 发表于 12-24 07:05 1346次阅读
    深入剖析ARM64<b class='flag-5'>异常</b><b class='flag-5'>处理</b>:开发者必须掌握的底层核心逻辑

    芯源MCU中断相关寄存

    。 5.5.2 NVIC 中断挂起和清除挂起 在中断发生时,如果系统正在处理与之相同优先级或更高优先级的中断,系统将不会立即处理
    发表于 11-27 07:23

    线路保护光纤通道异常处理方法

    在电力系统,线路保护光纤通道是保障电网安全稳定运行的核心环节。然而,受环境、设备老化或人为操作等因素影响,光纤通道异常时有发生,可能导致保护装置误动或拒动,引发严重后果。本文将系统梳理线路保护光纤
    的头像 发表于 11-17 10:01 1590次阅读
    线路保护光纤通道<b class='flag-5'>异常</b><b class='flag-5'>处理</b>方法

    API接口调用的网络异常及解决方案

    不可达(Connection Refused/Timeout) 服务IP/端口错误:配置的API域名解析错误、端口号填写错误(如将HTTPS默认的443端口写成80)。 服务离线或过载:API服务宕机、维护
    的头像 发表于 11-17 09:22 961次阅读

    RVMCU课堂「10」: 手把手教你玩转RVSTAR—处理器内部中断

    中断是指处理器内核在顺序执行程序指令流的过程突然被别的请求打断而中止执行当前的程序,转而去处理别的事情,待其处理完了别的事情,然后重新回到
    发表于 10-31 06:12

    关于蜂鸟E203内核中断硬件实现中断嵌套的设计

    开发板:MCU200T 中断机制即处理器核在执行程序指令流的过程突然被别的请求打断而中止执行当前程序,转而处理别的事情,处理完重新回到之前
    发表于 10-23 07:07

    基于E203 NICE协处理器扩展指令

    1、实现功能 基于官方提供的demo nice的硬件代码,设计一个基于e203 nice协处理的加法器。 2NICE协处理器理论学习 nice协处理器的作用主要是用于控制通路的管理 去年
    发表于 10-21 14:35

    中断机制在计算机系统的作用,如何在e203处理器利用外部中断处理用户输入输出

    的效果。 7.总结 本文详细介绍了中断机制在计算机系统的作用,以及如何在e203处理器利用外部中断
    发表于 10-21 12:47

    Cortex-M0+处理器的HardFault错误介绍

    在ARM处理器,如果一个程序产生了错误并且被处理器检测到,就会产生错误异常。Cortex-M0+处理器只有一种
    的头像 发表于 10-14 10:50 3647次阅读
    Cortex-M0+<b class='flag-5'>处理器</b>的HardFault错误介绍