ARM微处理器的编程模型之:异常中断处理
他SWI空间可用于特定应用程序的SWI。在一个特定的应用程序中,如果从指令中提取SWI编号的开销太大,就可使用这个方法。ARM(0x123456)和Thumb(0xAB)半主机方式的SWI就是这样实现的。 下面的例子显示了如何使用_swi将C函数调用映射到半主机方式的SWI。 #ifdef __thumb /* Thumb 状态的Semihosting软中断处理*/ #define SemiSWI 0xAB #else /* ARM状态下的Semihosting的软中断处理*/ #define SemiSWI 0x123456 #endif /* 使用Semihosting软中断输出一个字符*/ __swi(SemiSWI) void Semihosting(unsigned op, char *c); #define WriteC(c) Semihosting (0x3,c) void write_a_character(int ch) { char tempch = ch; WriteC( tempch ); } 编译程序含有一个机制,用以支持使用r12来传递所需运算的值。根据AAPCS标准,r12为IP寄存器,并且专用于函数调用。其他时间内可将其用作暂存寄存器。如前面所述,通用SWI参数和返回值通过r0~r3寄存器传递。而r12可用于传递通用SWI调用的中断功能编号。 下面的例子显示了通用SWI的C语言程序框架。 __swi_indirect(0x80) unsigned SWI_ManipulateObject(unsigned operationNumber, unsigned object,unsigned parameter); unsigned DoSelectedManipulation(unsigned object, unsigned parameter, unsigned operation) { return SWI_ManipulateObject(operation, object, parameter); } 生成的汇编代码如下。 DoSelectedManipulation PROC STMFD sp!,{r3,lr} MOV r12,r2 SWI 0x80 LDMFD sp!,{r3,pc} ENDP
微处理器 异常中断处理 ARM 复位异常 数据异常 相关文章:
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)