arm嵌套中断

arm异发生时,硬件会自动保存pc到异常模式下的lr,以及保存cpsr到spsr,把cpsr设置为相应异常模式,把pc设置为相应异常处理程序的入口。这个问题就来了,如果发生嵌套中断,那么会覆盖之前中断的lr,无法返回。

为了避免这个问题,在执行ISR之前,会进行模式切换,切换到SVC货系统模式。在相应的模式下构造一个帧,就像一般的函数调用栈帧,保存现场,保存lr,sp等等。接着调用ISR,如果发生中断就继续构造栈帧。这样返回的时候就会像函数调用那样一层一层返回。。


分析arm-linux里面的中断,也是用的这个方法。

vector_irq:

   .if 4

   sub   lr, lr, #4

   .endif

 

   @

   @ Save r0, lr_<exception> (parent PC) and spsr_<exception>

   @ (parent CPSR)

   @

   stmia sp, {r0, lr}    @ save r0, lr

   mrs   lr, spsr

   str   lr, [sp, #8]    @ save spsr

 

   @

   @ Prepare for SVC32 mode.  IRQs remain disabled.

   @

   mrs   r0, cpsr

   eor   r0, r0, #(IRQ_MODE ^ SVC_MODE | PSR_ISETSTATE)

   msr   spsr_cxsf, r0

 

   @

   @ the branch table must immediately follow this code

   @

// lr中当前存储了进入异常处理程序之前的状态寄存器的值,宏定义的前面部

// 分有从spsr取值到lr的代码,对后几位做与,即是获取在中断前处理器所

// 处的状态,这个值在后面会被用作跳转表的索引。

   and   lr, lr, #0x0f

// 用做他用,sp值当第一个参数传给后面函数

   mov   r0, sp

// pc是当前执行指令地址加8,即跳转表的基地址,lr是索引,很好的技巧,

// 取pc获取当前指令地址什么时候都没错

ARM(   ldr   lr, [pc, lr, lsl #2]  )

   movs  pc, lr      @ branch to handler in SVC mode

ENDPROC(vector_irq)

后面会跳入到__irq_svc   entry_armv.S里面看。

开始就会调用svc_entry,里面会构造栈帧。最后调用svc_exit恢复。


代码转载自:https://pan.quark.cn/s/7f503284aed9 Hibernate的核心组件总数达到五个,具体包括:Session、SessionFactory、Transaction、Query以及Configuration。 这五个核心组件在各类开发项目中都具有普遍的应用性。 借助这些组件,不仅可以高效地进行持久化对象的读取与存储,还能够实现事务管理功能。 接下来将通过图形化的方式,逐一阐述这五个核心组件的具体细节。 依据所提供的文件内容,可以总结出以下几个关键知识点:### 1. SSH框架详细架构图尽管标题提及“SSH框架详细架构图”,但在描述部分并未直接呈现关于SSH的详细内容,而是转向介绍了Hibernate的核心接口。 然而,在此我们可以简要概述SSH框架(涵盖Spring、Struts、Hibernate)的核心理念及其在Java开发中的具体作用。 #### Spring框架- **定义**:Spring框架是一个开源架构,其设计目标在于简化企业级应用的开发流程。 - **特点**: - **分层结构**:该框架允许开发者根据实际需求选择性地采纳部分组件,而非强制使用全部功能。 - **可复用性**:Spring框架支持创建可在不同开发环境中重复利用的业务逻辑和数据访问组件。 - **核心构成**: - **核心容器**:该部分包含了Spring框架的基础功能,其核心在于`BeanFactory`,该组件通过工厂模式运作,并借助控制反转(IoC)理念,将配置和依赖管理与具体的应用代码进行有效分离。 - **Spring上下文**:提供一个配置文件,其中整合了诸如JNDI、EJB、邮件服务、国际化支持等企业级服务。 - **Spring AO...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值