导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[MICKEYMOUSE]Realview MDK中编译器对中断处



No.30545
作者:MICKEYMOUSE
邮件:zhanghf@embedinfo.com
ID:104569
登陆:13次
文章数:28篇
最后登陆IP:183.38.85.6
最后登陆:2011/6/29 15:33:54
注册:2008/4/1 15:50:28
财富:301
发帖时间:2008/4/11 9:55:17
发贴者IP:218.17.61.186
标题:MICKEYMOUSE:Realview MDK中编译器对中断处理的过程处理[推荐]
摘要:No.30545Realview MDK中编译器对中断处理的过程处理[推荐] 在ARM程序的开发过程中,对中断的处理是很普遍的、也是相当重要的。Realview MDK使用的RVCT编译器提供了__irq关键字,用此关键字修饰的函数被作为中断出来函数编译,即在编译的过程中,编译器会自动添加中断处理过程中现场保护和恢复的代码,减小程序的开发难度,加快软件的开发过程。

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

Ø  从SWI和Undef异常返回时使用:

movs pc, LR;

Ø  从FIQ、IRQ和预取终止返回时使用:

SUBS PC, LR,#4;

Ø  从数据异常返回时使用:

SUBS PC, LR,#8

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

LDMFD SP!, {PC}∧

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

__irq void pwm0_irq_handler(void)   

{

    //Deassert PWM0 interrupt signal

    unsigned i ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:357232毫秒 查询6次