4.4异常进入/退出小节
表2-4总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。
异常进入/退出
| 返回指令 | 以前的状态 | 注意 |
ARM R14_x | Thumb R14_x |
BL | MOV PC,R14 | PC+4 | PC+2 | 1 |
SWI | MOVS PC,R14_svc | PC+4 | PC+2 | 1 |
UDEF | MOVS PC,R14_und | PC+4 | PC+2 | 1 |
FIQ | SUBS PC,R14_fiq,#4 | PC+4 | PC+4 | 2 |
IRQ | SUBS PC,R14_irq,#4 | PC+4 | PC+4 | 2 |
PABT | SUBS PC,R14_abt,#4 | PC+4 | PC+4 | 1 |
DABT | SUBS PC,R14_abt,#8 | PC+8 | PC+8 | 3 |
RESET | NA | - | - | 4 |
注意:
1、在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。
2、在此PC是从FIQ或IRQ取得不能执行的指令的地址。
3、在此PC是产生数据中止的加载或存储指令的地址。
4、系统复位时,保存在R14_svc中的值是不可预知的。
4.5异常向量(Exception Vectors)
异常向量地址。
异常向量表
地 址 | 异 常 | 进入模式 |
0x0000,0000 | 复位 | 管理模式 |
0x0000,0004 | 未定义指令 | 未定义模式 |
0x0000,0008 | 软件中断 | 管理模式 |
0x0000,000C | 中止(预取指令) | 中止模式 |
0x0000,0010 | 中止(数据) | 中止模式 |
0x0000,0014 | 保留 | 保留 |
0x0000,0018 | IRQ | IRQ |
0x0000,001C | FIQ | FIQ |
4.6异常优先级(Exception Priorities)
当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序如表2-6所示。
异常优先级
优先级 | 异 常 |
1(最高) | 复位 |
2 | 数据中止 |
3 | FIQ |
4 | IRQ |
5 | 预取指令中止 |
6(最低) | 未定义指令、SWI |
4.7 应用程序中的异常处理
当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。
5存储系统
字―――32位
半字――16位
字节――8位
每个字有4个字节组成
假如有数据0x01020304
大端格式:
小端格式:
大端小端格式由硬件决定,在ARM7TMDI S3c4510B 中,是由49针的电平决定的
LITTLE | 49 | I | 小端模式选择引脚。当该引脚为高电平时,S3C4510B工作在小端模式,当该引脚为低电平时,工作在大端模式。该引脚在片内已下拉,因此,S3C4510B缺省工作在大端模式。 |