ARM中断向量表与响应流程

本文详细介绍了ARM处理器的中断向量表的定义、加载位置以及中断服务程序。中断向量表存储在`__vectors_start`,包含跳转指令,指向中断服务程序。中断处理流程涉及硬件中断控制器的跳转,软件部分则通过中断向量表的跳转指令执行对应的中断处理。文章还探讨了中断服务程序的定义、存放地址以及在内核启动时的拷贝过程。

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

首先中断向量表定义在哪里?如何加载?

  中断向量表与中断服务程序

处理流程

////////////////////////////////////////////////////////////////////////////////////////////////////

首先中断向量表定义在哪里?__vectors_start

首先中断向量表定义的是什么?定义的就是中断服务程序的跳转指令因为每个中断向量在向量表中只有一个字节的存储空间,只能存放一条指令,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。这里cpu就可以找中断服务程序,跳转指令如例如:

LDRPC, =ISR_HANDLER;

或者

指令与不同的cpu平台有关系。

 

1.1 vector表定义的方式:往往是变量地址:

如 .

 .globl      __vectors_start  定义__vectors_start符号,这样外部程序可以访问到。entry-armv.S

__vectors_start:

       swi  SYS_ERROR0

       b    vector_und + stubs_offset

       ldr  pc, .LCvswi + stubs_offset

       b    vector_pabt + stubs_offset

       b    vector_dabt + stubs_offset

       b    vector_addrexcptn + stubs_offset

       b    vector_irq + stubs_offset

       b     vector_fiq + stubs_offset

ARM的异常处理向量表在entry-armv.S文件中:

1.2 中断向量表 类型


                   From ARM

 

       .globl      __vectors_start  定义__vectors_start符号,这样外部程序可以访问到。

__vectors_start:定义异常(地址逻辑自上而下0x00----0x1c)跟具体的cpu特性有关

 ARM(        swi        SYS_ERROR0        )向量0:reset,但是这里被修改了,如果是cpu跑到了0地址,用软件中断SYS_ERROR0来处理.

 THUMB(        svc        #0                )向量1

 THUMB(        nop                        )向量2

W(b)        vector_und+ stubs_offset  向量3 #未定义指令异常

W(ldr)        pc,.LCvswi + stubs_offset  向量4#软中断

W(b)        vector_pabt+ stubs_offset  #向量5指令预取异常中断(Prefetch Abort)

W(b)        vector_dabt+ stubs_offset   #向量6数据中止

W(b)        vector_addrexcptn+ stubs_offset  #向量7地址异常Thesearen't too critical.

W(b)        vector_irq+ stubs_offset  #向量8.IRQ(一般中断)

W(b)        vector_fiq+ stubs_offset  #向量9  FIQ(快速中断)

 

 

/*关于.globl指令:

    .global/.globl 命令

 

    .global symbol

 

    .global 使得连接程序(ld)能够识别symbl

    声明symbol是全局可见的标号_start是GNU链接器用来指定第一个要执行指令所必须的,同样的是全局可见的(并且只能出现在一个模块中)

 

    例如:

        .global_start    #定义_start为外部程序可以访问的标签

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值