欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ARM异常处理

程序员文章站 2024-02-25 21:18:27
...

异常种类

  •         中断             IRQ FIQ                          外部硬件触发
  •         软中断          Soft interrupt                  系统调用
  •        复位               Reset                             如手机死机了,按power键
  •        未定义指令    Undefined instruction   
  •        数据异常        Data abort                    数据越界

   中断异常

       ARM有俩级外部中断 FIQ ,IRQ

      大多数基于ARM的系统有 > 2个中断源,因此需要一个中断控制器

      Note:  通常中断处理程序总是包含清除中断源的代码

ARM异常处理

异常处理过程 

ARM异常处理

 异常向量表

ARM异常处理

 异常与工作模式关系

          复位,软中断                                             -->  SVC

         Prefetch(预取),Data Abort                   --> Abort

         user system 模式不是异常触发切换的·,是程序员修改CPSR,实现切换的

    .text
    @异常向量表
    b     reset        @0x00    reset
    nop                @0x04    udef
    b     swi_handler  @0x08    swi    软中断程序的入口
    nop                @0x0c    prefetch abort
    nop                @0x10    data abort
    nop                @0x14    reserved
    nop                @0x18    irq
    nop                @0x1c    fiq


swi_handler:
    stmfd sp!,{r0,lr}    @进栈保护现场
    mov r0,#6
    ldmfd sp!,{r0,pc}    @出栈恢复现场

swi_num_handler:

    @switch(num)
    @{
    @    case 2:
    @    ...
    @    case 4:
    @    ...

    cmp r0,#2
    moveq r7,#2
    cmp r0,#4

reset:
    ldr sp,=stack_base

    @切换到应用程序

    msr cpsr,#0x10
    mov r0,#3

    @    open    read    write    ioctl    ...通过系统调用访问内核数据
    @      2      4         6       7

    swi 2     @跳转到异常向量表软中断的入口位置
              @保存返回地址到LR
              @切换到SVC工作模式
    

    mov
    b

    .data
buf:
    .space 32
stack_base:


    .end