首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
ARM中断处理的安全性与高效性研究
来源:本站整理  作者:佚名  2009-07-02 10:30:30




    首先假设初始化代码中已正确建立了IRQ堆栈。

   
    <所有已使能中断的查询与服务>
     ;将同时发生的中断全部服务,以提高效率
    LDMFD SP!,{R0-R3,R12,R14} ;恢复上下文
    在上述保存上下文中没有必要保存SPSR。因在非嵌套的中断处理程序中,它不会被任何顺序的中断所破坏。
    如果用C语言来书写该处理程序,可以使用关键字一IRQ来说明,以告诉编译器实现如下的操作:
    ①保存.ATPCS规定的被破坏的寄存器;
    ②保存其他中断处理程序中用到的寄存器;
    ③同时将(LR-4)赋予程序计数器PC,实现中断程序的返回并且恢复CPSR寄存器的内容。
    普通中断处理的C语言程序可以按如下格式编写:

   
    可见,无论是用C语言还是汇编语言来编写,它们的工作原理都是一样的。图2给出了普通中断处理过程中,ARM寄存器的保存示意图(虚线是压栈保存,实线是弹栈恢复)。图中与程序处理的步骤相对应,可以帮助理解处理器上下文的保存过程。

3 任务切换
    有操作系统的嵌入式系统中,中断的发生要求保存全部寄存器的内容到任务的栈中,它不是基于安全的考虑是因为可能中断会导致任务的切换。任务切换发生时所有任务的寄存器的值都要保存到该任务的栈中。下个任务的上下文将从该任务栈中得以恢复到处理器的寄存器中。下面就本问题作出分析并给出实现的程序代码。从图1中断处理寄存器的保存可知,中断发生后任务的CPSR和PC两寄存器的值在IRQ模式的SPSR和LR中,所以不能简单地切换到任务运行的模式中,否则被中断任务返回时的CPSR和PC将不可见(因为它们保存在IRQ模式的专用寄存器中,在其他模式中无法操作)。此时,可以考虑设置一些变量区作为媒介,将其予以转存到任务运行模式的栈中去。

上一页  [1] [2] [3] [4] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:323,210.90000 毫秒