【ARM】Cortex-M3 异常系统

发布者:乘风翻浪最新更新时间:2021-03-24 来源: eefocus关键字:ARM  Cortex-M3  异常系统 手机看文章 扫描二维码
随时随地手机看文章

CM3内核正常工作时是按照指令顺序执行的,当发生异常或者中断时,将打断正在执行的动作,进而执行异常或中断的服务程序。


异常系统具有保障CM3工作的安全性和健壮性的作用。


1 异常类型

异常分为复位(Reset),不可屏蔽中断(NMI),硬件错误(HardFault),存储管理错误(MemManageFault),总线错误((BusFault)),用法错误(UsageFault),系统调用(SVC),可悬挂系统调用(PendSV),系统节拍(SysTick)等。

2 优先级的定义

当异常存在多个时,就会出现竞争,进而出现优先级的概念。当不同的异常发生时,究竟该响应哪一个?这是由优先级来决定的。


在 CM3 中,优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何时可以响应。优先级的数值越小,则优先级越高。 CM3 支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常。有 3 个系统异常:复位, NMI 以及硬 fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常。所有其它异常的优先级则都


是可编程的(但不能编程为负数)。

原则上,CM3可支持256级的可编程优先级,但是芯片公司考虑到成本以及精简设计,只会支持少于256的优先级,比如8,16,32等。


以下的3位(MSB高位对齐)表示,可以支持8级优先级:

但是,优先级的规定并不是只用“抢占优先级”来定义,为了使抢占机能更加可控,CM3还把256级优先级分成高低两段,分别是抢占优先级和亚优先级。二者占的位数不同,也就是所谓的优先级分组。

抢占优先级最多有7位,所以最多128个抢占级。


在计算抢占优先级和亚优先级的有效位数时,必须先求出下列值:

1 芯片实际使用了多少位来表达优先级.

2 优先级组是如何划分的。

举个例子,如果只使用 3 个位来表达优先级([7:5]),并且优先级组的值是 5(从比特 5

处分组),则你得到 4 级抢占优先级,且在每个抢占优先级的内部有 2 个亚优先级。

通过这样的优先级机制,可以对异常或者中断进行优先级编程(手动指定优先级)。


3 向量表

当发生了异常并且要响应它时, CM3 需要定位其处理例程的入口地址(函数入口地址)。这些入口地址存储在所谓的“(异常)向量表”中。CM3 认为该表位于零地址处,且各向量占用 4 字节,因此每个表项占用 4 字节。

4 Fault类异常

有若干个系统异常专用于 fault 处理。 CM3 中的 Faults 可分为以下几类:

1 总线 faults (取指出错,POP/PUSH错误)

2 存储器管理 faults (访问MPU范围外的地址,往只读区域写数据,用户级访问特权级地址)

3 用法 faults (未定义指令,除数为0)

4 硬 faults (前三者错误的服务例程无法执行时,变为HardFault)


5 SVC和PendSV

操作系统中的任务调度,用户/内核态的上下文切换,可以通过SVC和PendSV异常来实现。


SVC(系统服务调用,亦简称系统调用)和 PendSV(可悬起系统调用),它们多用于在操作系统之上的软件开发中。 SVC 用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就会产生一个 SVC 异常,然后操作系统提供的 SVC 异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。


这种“提出要求——得到满足”的方式,很好、很强大、很方便、很灵活、很能可持续发展。首先,它使用户程序从控制硬件的繁文缛节中解脱出来,而是由 OS 负责控制具体的硬件。第二, OS 的代码可以经过充分的测试,从而能使系统更加健壮和可靠。第三,它使用户程序无需在特权级下执行,用户程序无需承担因误操作而瘫痪整个系统的风险。第四,通过 SVC 的机制,还让用户程序变得与硬件无关,因此在开发应用程序时无需了解硬件的操作细节,从而简化了开发的难度和繁琐度,并且使应用程序跨硬件平台移植成为可能。开发应用程序唯一需要知道的就是操作系统提供的应用编程接口(API),并且了解各个请求代号和参数表,然后就可以使用 SVC 来提出要求。

另一个相关的异常是 PendSV(可悬起的系统调用),它和 SVC 协同使用。一方面, SVC异常是必须立即得到响应的(若因优先级不比当前正处理的高, 或是其它原因使之无法立即响应, 将上访成硬 fault——译者注), 应用程序执行 SVC 时都是希望所需的请求立即得到响应。另一方面, PendSV 则不同,它是可以像普通的中断一样被悬起的(不像 SVC 那样会上访)。 OS 可以利用它“缓期执行” 一个异常——直到其它重要的任务完成后才执行动作。 悬起 PendSV 的方法是: 手工往 NVIC 的 PendSV 悬起寄存器中写 1。 悬起后, 如果优先级不够高,则将缓期等待执行。


PendSV 的典型使用场合是在上下文切换时(在不同任务之间切换)。 例如, 一个系统中有两个就绪的任务,上下文切换被触发的场合可以是:


1 执行一个系统调用

2 系统滴答定时器(SYSTICK)中断,(轮转调度中需要)

任务中正在响应中断时(IRQ),是不能进行上下文切换的。如果 OS 检测到某 IRQ 正在活动并且被 SysTick 抢占(进行任务间的上下文切换),它将悬起一个 PendSV 异常,以便缓期执行上下文切换。


关键字:ARM  Cortex-M3  异常系统 引用地址:【ARM】Cortex-M3 异常系统

上一篇:ARM基础篇—ARM微处理器的应用领域及特点
下一篇:【ARM】Cortex-M3 存储器系统

推荐阅读最新更新时间:2024-11-13 13:51

瑞萨电子将展示 基于Arm® Cortex®-M85处理器Helium技术的首款AI方案
瑞萨电子将在Embedded World展示 基于Arm® Cortex®-M85处理器Helium技术的首款AI方案 瑞萨作为微控制器领域卓越供应商,将在2023年Embedded World 展示全新处理器在苛刻AI应用中的理想性能 2023 年 3 月 9 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布,将在基于Arm® Cortex®-M85处理器的MCU上首次现场演示人工智能(AI)和机器学习(ML)运行,由此展示瑞萨电子在应用Cortex-M85内核和Arm Helium技术于AI/ML的丰富经验。 这些演示将于3月14至16日在德国纽伦堡举行的2023年度Embedded World展会
[工业控制]
瑞萨电子将展示  基于<font color='red'>Arm</font>® Cortex®-M85处理器Helium技术的首款AI方案
U-boot-2014.04移植到MINI2440(7) nand flash datasheet及arm9控制寄存器分析
我的MINI2440上有一个256M的nand flash,后面我们需要从nand启动u-boot,然后引导加载内核,再挂载根文件系统,这里先对其做一个较为细致的认识。主要是硬件管脚定义,控制方式,处理器的控制寄存器对其做一个了解,因为现在市面上nand的用途比较广泛,数码相机,mp3都要使用,进入正题。 一.nand flash datasheeet 在移植好的u-boot下输入nand info会出现下面的信息: Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiB 这说明nand大小为256M,工作电压3.3v,数据总线为8位,扇区大小为128K。首先我们
[单片机]
U-boot-2014.04移植到MINI2440(7) nand flash datasheet及<font color='red'>arm</font>9控制寄存器分析
利用嵌入式ARM+FPGA实现工业CT运动控制系统设计
1 引言 工业CT 机运动控制系统往往需要对多个轴的运动进行精确、实时控制,在以往的系统中多采用工控机+多块板卡的结构进行运动控制器的设计。随着工业CT 机整体功能日趋复杂,整体系统对运动控制系统的体积、成本、功耗等方面的要求越来越苛刻。另一方面,运动控制系统控制的轴数越来越多、控制精度要求越来越高、控制对象的实时性要求越来越强。 现有的工控机+多块板卡组成的控制系统逐渐呈现出运动控制方面的劣势。ARM+FPGA的硬件方案,将工控机从现有的运动控制系统中解放出来,取而代之的是体积小、功耗低、功能强的ARM 处理器。强大的嵌入式Linux 操作系统保证ARM 处理器的功能可以发挥到最佳。 2 硬件系统关键技术设计与实现 本系
[单片机]
利用嵌入式<font color='red'>ARM</font>+FPGA实现工业CT运动控制<font color='red'>系统</font>设计
ARM汇编之MOV PC,LR
BL NEXT ;跳转到子程序 ......... ;NEXT处执行 NEXT .......... MOV PC,LR ;从子程序返回 这里的BL是跳转的意思,LR(R14)保存了返回地址,PC(R15)是当前地址,把LR给PC就是从子程序返回。 1.SP(R13)、 LR(R14)、PC(R15) 2.LR(R14)的作用问题,这个LR一般来说有两个作用: (1)当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。 (2)异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要
[单片机]
ARM伪指令必读
在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。 符号定义( Symbol Definition )伪指令 符号定义伪指令用于定义 ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。 常见的符号定义伪指令有如下几种: 用于定义全局变量的
[单片机]
一种基于ARM单片机与CPLD的数字轴角转换方法
0 引言 同步机正余弦旋转变压器等广泛应用于火力控制,航空航天、自动控制等领域以实现系统间轴角信息的传输,由于计算机技术在上述领域的广泛应用,数字-轴角转换已(Digitalto Shaft-angle Converting,DSC)成为一个重要的问题。市场上DSC集成模块产品价格较高且接口不够灵活,在某些领域应用受到限制,特别在多路DSC使用时效费问题更为突出。基于上述问题,提出一种采用ARM单片机+CPLD实现数字-轴角转换的方法。 1 数字-轴角转换原理 数字-轴角转换(DSC)是将数字形式表示的轴角度θ通过运算电路转换为正余弦旋转变压器形式的电压,经正余弦旋转变压器和经过Scott变压器后驱动同步机指向对应轴角
[单片机]
一种基于<font color='red'>ARM</font>单片机与CPLD的数字轴角转换方法
Arm 30周年纪念——如今的Arm比以往更强大
本文编译自Fobes,作者:Patrick Moorhead 一般而言,过了感恩节后,主要的事情就是迎接假期,总结反思过去的一年并开启下一年的计划(尽管许多人无疑会忘记2020年)。Am有权来怀旧,这家半导体巨头正在庆祝其成立30周年活动,同时被Nvidia的收购,也将预示着公司迎接崭新的未来。但今天,我想根据我最近对公司CEO Simon Segars的采访,来了解Arm的重要纪念,公司的发展历程以及未来的战略。 Arm CEO Simon Segars 从谷仓到大时代 从比尔·盖特的车库到马克·扎克伯格的宿舍,许多伟大的高科技公司起步都很渺小。至于Arm,这一切都始于一个由十二名工程师组成的团队,他们在剑桥
[半导体设计/制造]
<font color='red'>Arm</font> 30周年纪念——如今的<font color='red'>Arm</font>比以往更强大
基于ARM9的多功能综合通信控制系统设计
伴随着计算机技术的迅速发展,工业数据采集已由传统的测控电路发展为由微型计算机、接口电路、外部通用设备和工业生产对象等组成的现代数据采集与控制系统。但是以微型计算机为核心的数据采集系统也逐渐暴露出许多缺陷:体积大,不易携带;扩展性差、成本高等。因此,以嵌入式系统为平台的数据采集和控制系统应运而生,嵌入式数据采集系统具备可靠性高、体积小、易扩展、开发周期短、成本低的特点使其的成为未来的通信控制发展趋势。 1 系统工作原理及框架 存储板通电后,程序自启动首先用Socket建立服务器等待PC端的配置信息,PC端按顺序发送时间帧和手机号码帧,当其中任何一个不满足帧格式或者校验错误时,存储板都会向PC端发送相应的重传指令,两个配置帧都
[单片机]
基于<font color='red'>ARM</font>9的多功能综合通信控制<font color='red'>系统</font>设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved