arm异常&mmu

异常(Exception):
 是由内/外部源引起的需要处理器干预的一个事件,
每种异常模式有自己的特殊功能寄存器,堆栈。
处理异常需要保护处理器的当前状态,以便在异常处理后可以恢复执行。
当异常发生时,系统强制从固定的地址执行程序

进入异常时,PC->R14和CPSR->SPSR保存PC和处理器状态,返回时则,CPSR->SPSR,R14->PC.

中断是异常的一个子集。未用中断通常指向一个空函数。
ARM提供了两种中断源IRQ,FIQ,发生中断时,会进入相应的IRQ,FIQ异常模式,
由异常处理程序识别不同的中断,调用相应的中断服务程序.


ARM的异常向量表位置:从0x0地址开始,连续8×4字节的空间,具体分配下:

HandleReset # 4
HandleUndef # 4
HandleSwi # 4
HandlePrefetch # 4
HandleAbort # 4
HandleReserv # 4
HandleIrq # 4
HandleFiq # 4


vxWorks下处理:
把相应的异常处理函数指针(或地址)存放在内存0x100处,在0x0的异常向量表存放
PC指针加载指令, LDR PC,[PC,#100],来加栽0x100处的异常处理函数.

vxWorks for arm 只使用了IRQ异常,所有外部中断ISR都以IRQ异常处理例程为入口.
当外部中断引起IRQ异常时,由IRQ异常处理例程调用挂在中断向量表中的ISR.  

中断嵌套:
一般,vxWorks以不可重入方式使用中断,在config.h中定义:
  #define INT_MODE    INT_NON_PREEMPT_MODEL

使用可重入中断方式时,存在中断嵌套,需要保存堆栈和返回地址.(SVC保护模式).

详略...


MMU:
MMU是存储器管理单元的缩写,是用来管理虚拟内存系统的器件。
MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表。
此表称作TLB(转换旁置缓冲区)。所有数据请求都送往MMU,由MMU决定数据是在RAM内
还是在大容量存储器设备内。如果数据不在存储空间内,MMU将产生页面错误中断。

一般,使用MMU解决了如下几个问题:

①使用DRAM作为大容量存储器时,如果DRAM的行列是非平方的,
会导致该DRAM的物理地址不连续,这将给程序的编写调试造成极大不便,
而适当配置MMU可将其转换成虚拟地址连续的空间。

②ARM内核的中断向量表要求放在0地址, 对于ROM在0地址的情况,无法调试中断服务程序,
所以在调试阶段有必要将可读写的存储器空间映射到0地址。

③系统的某些地址段是不允许被访问的,否则会产生不可预料的后果,为了避免这类错误,
可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型。

在IXP1200中,SDRAM的物理地址0--24M被提供给微码使用,物理地址0x1800000被映射到
虚拟地址0x0.

注意:在使能MMU后,程序继续运行,程序计数器的指针已经改变,指向了相应的虚拟地址,
在调试中要注意。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值