ARM嵌入式学习--第五天

ARM核的异常处理

-ARM核的8种异常源

-reset--复位异常

    描述:在内核复位时执行

    优先级:1级

    模式:SVC管理模式

-undefined  instruction--未定义指令异常

    描述:流水线执行非法指令产生,该异常发生在流水线译码阶段,如果当前指令不能被识别为有效指令,将会出现此类异常

    优先级:6级

    模式:UDF未定义模式

-SVC,SWI--软中断异常

    描述:用于程序触发软件中断执行,该异常是由应用程序自己调用时产生,该异常在管理模式(SVC)下运行

    优先级:6级

    模式:SVC管理模式

-prefetch abort--预取指令中止异常

    描述:当一条指令从内存种取出时由于某些原因失败,且如果它能到达执行状态将会触发此异常

    优先级:5级

    模式:ABT终止模式

-Data Abort--数据访问中止异常

    描述:如果一个预取指令试图存取一个不存在或违法的内存单元,将会触发此异常

    优先级:5级

    模式:ABT终止模式

-FIQ与IRQ

    FIQ:一般中断异常;优先级为3级;异常工作模式为FIQ快中断模式

    IRQ:快速中断异常;优先级为4级;异常工作模式为IRQ慢中断模式

-FIQ较IRQ快的原因:

    一、FIQ在异常向量表位于最末

        1.所以可以直接把异常处理程序写在异常向量表之后,省去了跳转的过程

        2.而IRQ需要执行向量表对应的跳转指令后,跳转到指定的中断处理程序

    二、FIQ模式有5个私有寄存器R8-R12

        1.执行中断处理程序前无需压栈保存寄存器,可直接处理中断

        2.而IRQ的R8-R12寄存器是与和其它模式共用的,在中断前需要保护现场,即把R8-R12的数据保存到栈中

    三、FIQ的优先级高于IRQ

        1.俩个中断同时发生时先响应FIQ

        2.FIQ可以打断IRQ,IRQ不能打断FIQ

ARM核异常处理过程

    异常产生,ARM核自动做的事情:

        1.拷贝CPSRSPSR

        2.修改CPSR

            ①改变处理器状态进入ARM态

            ②改变处理器模式进入相应的异常模式

            ③设置中断禁止位禁止相应中断

        3.保存返回地址当前PCLR

        4.PC设置到异常向量表相应位置 

    异常产生之前,需要做的事情:

        1.设置异常向量表

        2.告诉ARM核异常向量表的基地址

        3.编写异常处理函数

            ①设置SP寄存器

            ②将通用的寄存器(r0-r12)进行压栈保护

            ③异常处理

            ④异常返回

上一篇:【Linux】内核中申请内存的方法


下一篇:线性回归模型