zoukankan      html  css  js  c++  java
  • arm 异常处理结构

    概念:正常的程序执行过程中发生暂时的停止称为异常,如果发现异常情况,将会进行异常处理

    作用:快速响应用户的行为,提高cpu的响应能力

    异常类型:

    异常处理的三个步骤:

    1、保护现场:

    工作模式保存:CPSR-->SPSR(自动完成)自能保存在SPSR中,其他寄存器不行

    下一条要执行指令:lr<--pc(自动完成)

    数据的保存:STMFD SP!,{R0-R12}(需手动完成)

    2、跳到中断处理程序处:PC = 中断处理程序的首地址

    3、恢复现场:

    sp!-->R0-r12(还原数据)

    SPSR-->CPSR(还原工作状态)

    pc-->lr-4(pc指向的是正在取指的那条指令,与真正执行的指令相差8字节,与正在译码的指令相差4字节)所以需要减4:参考流水线结构

    -----------------------------------------------------------------

    具体的操作代码:

    IRQ_handle:
        LDR SP,=0XD0037180//(指明栈irq栈区的起始地址)memory mmap
        SUB LR,LR,#4
        STMFD SP!,{R0-R12,LR}  //防止bl 执行后pc指针被覆盖,将lr放到栈中
        BL 真正的中断处理函数,自动返回,恢复pc
        LDMFD SP!,{R0-R12,PC}^//加了‘^’表示自动恢复CPSR;
        

    上图为中断向量表:程序员使用的主要是IRQ和FIQ;

    fiq快速响应的原因是:

    1、优先级比IRQ更高

    2、拥有比IRQ更多的独立寄存器

  • 相关阅读:
    laravel常用函数大全Helper
    laravel查询语句指定索引(mysql强制索引)
    laravel-admin后台系统开发
    ES搜索引擎详解
    怎么查看当前的git分支是基于哪个分支创建的
    laravel中使用offsetSet
    laragon安装新的php版本
    Laravel collect妙用
    composer install file could not be downloaded (HTTP/1.1 405 Not Allowed)
    garphql
  • 原文地址:https://www.cnblogs.com/defen/p/5384094.html
Copyright © 2011-2022 走看看