向量表以及异常流程概述

1 对于Cortex-M0处理器,内置的中断控制器NVIC支持向量中断,这就意味着不同中断的异常向量是独立的,而且中断服务程序的入口自动分配,无需软件干预。

当处理器需要处理中断服务请求时,他需要首先确定异常处理的起始地址,所需要的信息叫做向量表,他存储在存储器空间的开始位置,向量表包括了系统中可用异常的异常向量,以及主栈指针的初始值。

2 异常向量的存储顺序同异常编号一致。由于每个向量都是1个字(4个字节),异常向量的地址为异常编号乘以4,。每个异常向量都是异常处理的起始位置,而且其最低位置一,表示异常处理为Thumb代码。

3 由于Cortex-M0处理器只支持几个系统异常,所以向量表中的某些空间没有使用。


异常流程概述

接收异常请求

需要满足以下几个条件:
1 对于中断和Systic中断请求,中断必须使能
2处理器正在执行的异常处理的优先级不能相同或者更大
3PRIMASK中断屏蔽寄存器没有屏蔽掉异常

压栈和出栈

为了使得被中断的程序能正确的正确执行,在异常被切换至异常处理之前,处理器当前状态的一部分应该被保存。

不同的架构处理器的处理方法不同,Cortex-M0处理器采用了硬件自动处理的方法来备份和恢复处理器状态,如果有必要,程序中还需要增加软件处理过程。

当处理器接受了一个异常以后,寄存器组当中的一些寄存器(RO到R3,R12以及R14),返回地址(PC)以及程序状态寄存器(XPSR)会被自动压入当前的栈空间里。

自动保存和恢复寄存器内容的操作被称为压栈和出栈,这种机制减小了软件的开销以及回路的大小(无需另外的寄存器组),因此也就降低了系统的功耗。

自动压栈过程没有备份所有的寄存器,其他的寄存器在异常处理过程中只能通过软件来保存和恢复。

末尾连锁

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

延迟迟到

若在低优先级异常压栈过程中发生了高优先级的异常,处理器就会首先是处理高优先级的异常
这是一种Cortex-M0内核的优化机制,,他可以加快高优先级的处理。

压栈操作完成以后,高优先级的异常向量就会被取出以替代低优先级的那个。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值