arm9 中断向量 重定位_技术小课堂| CortexM架构MCU重定位向量表

8bcc574353d8f4c60a6893cd2a1a2a7d.gif

Cortex-M架构使用了“向量表查表机制”,当异常发生时,内核会自动从向量表查找出Handler的入口地址。向量表其实是一个 WORD(32 位整数)数组,每个下标对应一种异常,该下标元素的值则是该异常 handler的入口地址。

向量表在地址空间中的位置是可以设置的,通过SCB中的VTOR寄存器来指出向量表的地址。在复位后,该寄存器的值为0。因此,在地址0处必须包含一张向量表,用于初始时的异常分配。但在系统运行之后我们可以通过修改VTOR寄存器重定位向量表到其他地址,可以是Flash区域,也可以是RAM区域。但必须注意向量表的起始地址的要求:必须先求出系统中共有多少个向量,再把这个数字向上增大到是 2 的整次幂,而起始地址必须对齐到后者的边界上。例如,如果一共有68个中断,则共有 68+16(系统异常)= 84 个向量,向上增大到 2 的整次幂后值为 128,因此地址必须能被 128*4=512 整除。

本文以IAR EWARM开发环境为例,将STM32F107的向量表重定位到SRAM的起始地址。EWARM要求默认的向量表要命名为“__vector_table”,以便它的调试系统能够正确识别出向量表,并且放置在Flash的零地址。

然后,在SRAM也定义一个向量表ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值