ARM异常处理

异常种类

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

   中断异常

       ARM有俩级外部中断 FIQ ,IRQ

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

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

异常处理过程 

 异常向量表

 异常与工作模式关系

          复位,软中断                                             -->  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
发布了33 篇原创文章 · 获赞 7 · 访问量 1438

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/104113909