新闻中心

EEPW首页>嵌入式系统>设计应用> ARM微处理器的编程模型之:异常中断处理

ARM微处理器的编程模型之:异常中断处理

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257085.htm

下面的例子显示了如何使用_swi将C函数调用映射到半主机方式的SWI。

#ifdef __thumb

/* Thumb 状态的Semihosting软中断处理*/

#define SemiSWI 0xAB

#else

/*状态下的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


上一页 1 2 3 4 5 6 7 8 9 10 下一页

评论


相关推荐

技术专区

关闭