ARM系统中断向量表的动态配置

在32位ARM嵌入式系统中,中断向量表通常是固定的,但在某些场景下需要动态配置。文章介绍了如何在运行时动态修改中断向量表,通过增加一条指令跳转到向量表,然后执行向量表中的跳转指令,实现中断服务程序的灵活跳转。这种方法简化了中断向量的设置,避免了修改汇编代码的繁琐过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常情况下32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM 嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤其如此。 当需要在程序运行过程中动态修改中断向量的程序时会感到更为不便,不得不增加很多分支处理指令才能实现。为此本文提出一种简便高效的配置方法,实现了 ROM固化程序在运行时动态配置ARM嵌入式系统中断向量表的功能。

1 ARM中断向量两种设置方法
在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中

断服务例程的功能。例如:
IRQEntry B HandleIRQ ;跳转范围较小
B HandleFIQ
或IRQEntry LDR PC,=HandleIRQ ;跳转的范围是任意32位地址空间
LDR PC,=HandleFIQ
LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令四周的存储单元

中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。
之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数 (常数),无法直接

把一个32位常数数据或地址数据装载到寄存器中。下面一般程序与上述伪指令功能等效,但中断向量表

描述得更为清楚。其中 VectorTable为相对LDR指令的偏移量:
IRQEntry LDR PC,VectorTable 0
;与LDR PC,=HandleIRQ等效
LDR PC,VectorTable 4
;与LDR PC,=HandleFIQ等效
……
VectorTable DCD HandleTRQ
DCD HandleFIQ
……
HandleIRQ
……
HandleFIQ
一般ARM嵌入式系统的程序都是固化在从00000000H开始的低端ROM空间中,中断 向量表VectorTable也是
固化在ROM中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。不论对于初学ARM处理器的程序员还是有 经验的程序员,设置中断向量都相当繁琐,必须修改ARM的C程序的启动代码。一段晦涩的汇编代码很不方便,比较轻易出错。
2 X86与ARM处理器中断向量表比较
实模式X86程序员都熟悉,在X86体系结构的PC系统中,不论是用汇编还是用C语言,都可以动态随机地设置、修改中断向量表—只需要简单地把中断程序例程的入口地址写入到中断向量表数据区,即可完成向量表的设置。
X86向量表设置方便的原因有两个。其一是中断向量表与程序代码完全分离,中断向量表设置 在RAM数据空间,向量表存放的数据是纯粹地址数据;而在ARM向量表中存放的是与中断服务例程入口有关的一条分支指令。另一个原因是,除BIOS外,大 多数PC程序都是在运行时加载到RAM中的,程序数据是不加区别的,所以可以很轻易在程序运行的过程中从数据生成程序,并可以很轻易把CPU控制权转到新 生成的程序中。
表面上看,在ARM第二种中断向量设置方法的向量表VectorTable中也是纯地址数 据,不含指令代码,似

乎可以把VectorTable设置在RAM数据段中。然而一般ARM体系的ROM代码段和RAM数据段间的偏移远大于2

12,故超出了LDR使用PC为基址的相对寻址范围。
代码中的VectorTable是一个与当前PC间的一个偏移,LDR指令的相对地址是在 编译时计算的,要求VectorTable<2 12,所以VectorTable不能随意安排在RAM空间中。VectorTable一般只能安排在中断跳转

指令四周的代码区内中。
3 ARM结构中中断向量表的动态配置方法
要在ARM结构中实现与X86中一样方便的在中断向量的随机存取功能,向量表的地址数据必须可以安排在任意32位地址的RAM空间中。为此,中断处理必须增加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值