您好、欢迎来到现金彩票网!
当前位置:彩之网 > 中断处理 >

Realview MDK中编译器对中断处理的过程详解

发布时间:2019-06-19 11:20 来源:未知 编辑:admin

  在理解__irq关键字的作用之前,先看一下ARM核对异常的处理过程。当产生异常时, ARM核拷贝CPSR寄存器的内容SPSR_寄存器中,同时设置适当的CPSR 位、改变处理器状态进入ARM 态和处理器模式,从而进入相应的异常模式。在设置中断禁止位禁止相应中断(如果需要)后,ARM核保存返回地址到LR_,同时设置PC为相应的异常向量。当异常返回时, 异常处理需要从SPSR_

  在使用上述指令异常返回时,如果LR之前被压栈的话使用LDM “”, 例如:

  理解了ARM异常处理的过程以后,Realview MDK中__irq关键字的作用就容易理解了。下面的函数为一个中断处理函数,其前面加了__irq关键字。

  当编译器器编译这个函数时,除了保存ATPCS规则规定的寄存器以外,还保存了CPSR及PC的值。在函数的返回时,还自动添加了SUBS PC, LR, #4和从SPSR寄存器恢复CPSR寄存器值的指令。用这种方式处理以后,中断处理函数可以和普通函数一样的使用。

  注意:中断处理都是在ARM模式下进行的,当源程序欲编译成Thumb指令时,这时,用__irq关键字修饰的函数仍然会被编译成ARM指令。如果源程序编译成在CORTEX M3上运行的指令时,关键字__irq对函数的编译没有任何影响,即编译器不会自动保存CPSR及PC的值,也不会添加SUBS PC, LR, #4和从SPSR寄存器恢复CPSR寄存器值的指令,因为CORTEX M3处理器硬件会自动处理这些问题,无需软件开发人员关心。

http://ando2.com/zhongduanchuli/115.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有