ARM7种工作模式-切换

首先梳理一下思路:

1.每种异常模式的进入地址都是固定的(硬件决定)

2.软件编写以各个异常模式的地址开始跳转到自定义的地址进行展开编写

3.发生异常,硬件会将先前模式下的下一条指令放入LR寄存器,并将CPSR的值存入SPSR

4.在异常模式下首先选择栈地址存放数据,要保存先前的环境到栈中(虽然先前硬件有保存,但是接下来的程序会使其变化,所以我们要将先前的环境数据提取出来再自己保存)

5.编写异常处理程序

6.恢复环境

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

简单代码示例:

/* sp_irq未设置, 先设置它 */
    ldr sp, =0x33d00000

/* 保存现场 */
/* 在irq异常处理函数中有可能会修改r0-r12, 所以先保存 */

/* lr-4是异常处理完后的返回地址, 也要保存 */
    sub lr, lr, #4
    stmdb sp!, {r0-r12, lr}  
    
/* 处理irq异常 */
    bl handle_irq_c
    

/* 恢复现场 */
    ldmia sp!, {r0-r12, pc}^  /* ^会把spsr_irq的值恢复到cpsr里 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值