新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 关于ARM核异常与中断处理机制研究

关于ARM核异常与中断处理机制研究

作者:时间:2011-04-10来源:网络收藏
六.堆栈设计

本文引用地址:http://www.eepw.com.cn/article/150862.htm

  在堆栈设计时,须确定2点:

  位置

  决定了在存储器映射中,堆栈从何处开始。大多数基于系统设计的堆栈是采用向下递减式的,栈顶位于存储器的高端地址。

  堆栈大小

  依赖于程序的类型-嵌套的还是非嵌套的。一个嵌套程序需要更多的存储器空间,因为堆栈将随嵌套的深度而增加。

  

中断堆栈

  第一种方式A,说明了一个传统的堆栈安排,中断的堆栈位于代码段之下。第二种方式B,中断堆栈在用户堆栈之上,位于存储器的顶端。B优于A之处是,B在堆栈溢出时不会破坏向量表,因此系统在确认堆栈溢出后,还有机会纠正自己的错误。每一种器模式都要建立一个堆栈,这是在处理器每次复位时完成的。因为系统复位是从管理模式开始的,所以不用再切换到管理模式,而其他模式堆栈的建立要切换到相应模式。用于模式堆栈-通常是最后设置的,因为当处理器处于用户模式时,没有直接修改cpsr的方法。由于系统模式和用户模式共享寄存器,所以可以强制处理器进入系统模式来设置用户模式堆栈。

  七.中断处理方法

  1)非嵌套中断处理

  最简单的中断处理是非嵌套的:只有当控制权回到被中断的任务或过程时,才允许再次相应中断。由于一个非嵌套的中断处理程序在一个时段内只能为一个中断处理程序服务,所以这种形式的中断处理程序不适合需要为多个不同优先级中断服务的复杂嵌入式系统。

  

非嵌套中断处理

  2)嵌套中断处理

  在处理程序完成当前中断的服务前重新允许中断,可以实现中断嵌套。嵌套的中断处理程序入口代码与简单的非嵌套中断处理程序类似。不同之处在于,在推出时,处理程序要测试被ISR更新过的一个标志。这个标志表明,是否需要做进一步的处理,如果不要求更多的处理,那么这个中断服务例程就完成了,处理程序也可以退出;如果需要进一步处理,处理程序可能要采取若干措施:重新允许中断,并/或执行一次上下文切换。重新允许中断包括把IRQ模式切换到SVC或系统模式。在IRQ模式下,不能简单的允许中断,因为这可能会导致链接寄存器r14_irq遭到破坏,特别是在执行完BL后即发生一次中断。执行上下文切换包括复位(清空)IRQ堆栈,因为当IRQ堆栈中还有数据的时,处理程序不会执行上下文切换。所有保存在IRQ堆栈的寄存器必须转移到任务堆栈,典型地是放在管理模式堆栈上。然后,其余的寄存器也必须被保存到任务堆栈。在那里,他们会被转移到堆栈中一个称为堆栈帧的保留存储块上。

  

嵌套中断处理

  如下恢复现场的指令:

  LDMFD R13!,(R0~R3,PC)^

  这里,寄存器列表后(其中必须包括PC)的后面的“^”表示这是一条特殊形式的指令。在从存储器装入PC的同时,CPSR也得到恢复。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭