arm异常&mmu

原创 2004年08月12日 20:15:00

异常(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后,程序继续运行,程序计数器的指针已经改变,指向了相应的虚拟地址,
在调试中要注意。

 

浅谈MMU在arm中的作用

mmu是Memory Management Unit的缩写,中文名是内存管理单元,既然它是内存管理单元,那么它是如何管理内存的呢?提示如何实现功能的呢?...
  • LittleMushroom_
  • LittleMushroom_
  • 2016年02月08日 19:02
  • 1009

追求卓越之--arm MMU详解

一、MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可...
  • lutherarcher
  • lutherarcher
  • 2016年07月21日 11:13
  • 437

ARM存储管理系统MMU

一、虚拟地址和物理地址的区别         CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分。如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有...
  • y695385603
  • y695385603
  • 2013年10月30日 18:09
  • 3341

关闭mmu和cache

介绍了mmu和cache,以及在bootloader中如何关闭它们
  • u011012049
  • u011012049
  • 2015年08月25日 19:18
  • 1023

arm的MMU详解(虚拟地址)

转载地址:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22891521&id=2109284 一、MMU的产生     ...
  • dongqing27
  • dongqing27
  • 2016年06月27日 14:58
  • 1210

ARM中MMU地址转换理解

MMU的段页表的虚拟地址与物理地址的转换过程
  • coldsnow33
  • coldsnow33
  • 2014年07月19日 12:33
  • 1571

arm-linux内核start_kernel之前启动分析(3)-开启MMU,走进新时代

在第二篇启动分析文章中讲到create pgtable时,对__turn_mmu_on所在的1M地址空间做了平映射,到现在这个阶段就看出其作用了。 CPU执行完成“mcr p15, 0, r0, c1...
  • skyflying2012
  • skyflying2012
  • 2015年08月28日 16:35
  • 5324

【ARM-Linux开发】Linux内存管理:ARM Memory Layout以及mmu配置

原文:Linux内存管理:ARM Memory Layout以及mmu配置 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory map。 1. ARM Memor...
  • LG1259156776
  • LG1259156776
  • 2016年11月26日 18:54
  • 791

ARM MMU 创建页表

启用MMU,映射SDRAM的地址空间,操作虚拟地址实现“点灯大法”,借此掌握MMU的使用。 实验环境及说明:恒颐S3C2410开发板H2410。H2410核心板扩展有64MB的K4S561632...
  • zhuzhiqi11
  • zhuzhiqi11
  • 2014年05月24日 17:10
  • 1318

Linux内存管理:ARM Memory Layout以及mmu配置

http://blog.csdn.net/hongzg1982/article/details/47341881 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory...
  • a04081122
  • a04081122
  • 2016年10月24日 15:33
  • 2082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:arm异常&mmu
举报原因:
原因补充:

(最多只允许输入30个字)