存储器映射和存储器重映射概念
- 格式:pdf
- 大小:129.48 KB
- 文档页数:2
嵌入式系统基础复习题第1章嵌入式系统概论1、什么是嵌入式系统?嵌入到对象体系中的专用计算机应用系统。
2、嵌入式系统的3个基本特点?嵌入性、专用性、计算机3、什么是嵌入式处理器,嵌入式处理器可以分为几大类?嵌入式处理器是为了完成特殊的应用而设计的特殊目的的处理器。
分为嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片上系统(SOC)。
4、什么是嵌入式操作系统和?有何特点?列出常见的几种嵌入式操作系统及特点。
5、试比较说明JA TG工具和ISP工具的异同点?6、从硬件系统来看,嵌入式系统由哪几部分组成?画出简图。
第2章ARM7体系结构1、什么是RISC指令系统?什么是CISC指令系统?RISC是精简指令集计算机的缩写。
CISC是复杂指令集计算机的缩写。
2、ARM与ARM公司有什么区别?举出2个以上的ARM公司当前应用比较多的ARM处理器核?ARM7系列、ARM9系列、ARM10系列、ARM11系列、intel的Xscale系列和MPCore系列。
3、ARM7TDMI中的T、D、S、I分别表示什么含义?T:支持高密度16位的Thumb指令集D:支持片上调试S:ARM7TDMI 的可综合(synthesizable)版本(软核)I:支持EmbededICE观察硬件M:支持64位乘法4、ARM7TDMI处理器采用什么样的体系结构,其可寻址地址空间多大?ARM处理器使用冯.诺依曼结构使用单个平面的232个8位字节地址空间。
地址空间可以看作是包含230个32位字,或231个16位半字。
5、ARM7TDMI与ARM9处理器采用几级流水线处理,使用何种存储器编址方式?ARM7TDMI处理器采用三级流水线。
ARM处理器将存储器看做是一个从0开始的线性递增的字节集合。
6、ARM处理器有几种模式和ARM处理器状态有什么区别?各种工作模式下分别有什么特点?R M处理器模式指用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。
CMS32M57xx数据手册ARM® Cortex® -M0 32位电机微控制器Rev. 1.04请注意以下有关CMS知识产权政策*中微半导体(深圳)股份有限公司(以下简称本公司)已申请了专利,享有绝对的合法权益。
与本公司MCU或其他产品有关的专利权并未被同意授权使用,任何经由不当手段侵害本公司专利权的公司、组织或个人,本公司将采取一切可能的法律行动,遏止侵权者不当的侵权行为,并追讨本公司因侵权行为所受的损失、或侵权者所得的不法利益。
*中微半导体(深圳)股份有限公司的名称和标识都是本公司的注册商标。
*本公司保留对规格书中产品在可靠性、功能和设计方面的改进作进一步说明的权利。
然而本公司对于规格内容的使用不负责任。
文中提到的应用其目的仅仅是用来做说明,本公司不保证和不表示这些应用没有更深入的修改就能适用,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方。
本公司的产品不授权适用于救生、维生器件或系统中作为关键器件。
本公司拥有不事先通知而修改产品的权利,对于最新的信息,请参考官方网站。
1. 产品特性1.1 MCU功能特性◆内核ARM Cortex™-M0,**********~5.5V- 单周期32位硬件乘法器◆32位硬件除法器(HWDIV)- 有/无符号模式,6个HCLK完成运算◆存储器- 最大64KB程序FLASH(APROM+BOOT)- 1KB的FLASH数据区(独立空间)- 最大8KB SRAM(支持分区写保护功能)- 支持BOOT功能,BOOT区可设置大小0-4KB- 支持硬件CRC校验FLASH空间代码- 支持FLASH分区保护(最小单位为2KB)◆系统时钟- 内部高速振荡48MHz/64MHz(HSI)- 内部低速振荡40KHz(LSI)◆GPIO(最多46 I/Os)◆LVR(1.8V/2.0V/2.5V/3.5V)◆LVD(2.0V/2.2V/2.4V/2.7V/3.0V/3.7V/4.0V/4.2V)◆内置温度传感器(TS)◆系统定时器- 24位SysTick定时器- 看门狗定时器(WDT)- 窗口看门狗定时器(WWDT)◆正常模式/睡眠模式/深度睡眠模式/停止模式◆通用循环冗余校验单元(CRC)◆定时器(32bit/16bit-TIMER0/1/2/3)◆捕获/比较/脉宽调制(CCP0/1)- 支持4通道同时捕捉可连接到霍尔传感器接口◆通信接口- 1个I2C模块(通信速度最快可达1Mb/s)- 1个SSP/SPI模块(4-16位数据格式可调)- 最多2个UART:UART0/1(共32个收/发FIFO)◆串行调试接口SWD(2-Wire)◆96bit唯一ID(UID)◆128bit用户UID(USRUID)- 用户可设置,可加密(可作为安全密钥)◆增强型PWM(EPWM)- 6路通道且通道可重映射- 支持独立/互补/同步/成组输出模式- 支持边沿/中心对齐计数模式- 支持单次/连续/间隔加载更新模式- 支持互补模式插入死区延时- 支持掩码及掩码预设(共8个掩码状态缓存)- 支持霍尔传感器接口(硬件控制PWM输出)- 支持故障保护及6种刹车信号源- 支持4种软/硬件故障恢复模式◆ADC0(12bit,100Ksps)- 最多20个通道- 每个转换通道有独立的结果寄存器- 支持单次/连续模式- 支持2种硬件触发方式共9个触发源- 1个转换结果比较器,可产生中断◆ADCB(12bit,1.2Msps)- 最多20个通道- 每个转换通道有独立的结果寄存器- 支持单次/连续模式、插入模式- 支持5种硬件触发方式共17个触发源- 1个转换结果比较器,可产生中断◆模拟比较器(ACMP0/1)- 正端4路选择,负端可选内部1.2V/VDD分压- 支持单/双边迟滞电压选择:10mV/20mV/60mV - 支持比较器输出触发EPWM刹车◆可编程增益放大器(PGA0/1)- 正端2路选择- 输出可接内部ADC通道与模拟比较器的输入- 内部增益可选择:4倍~32倍◆运算放大器(OP0/1)- 输入可接内部1.2V基准- 输出可接内部ADC通道与模拟比较器的输入- 可设置为比较器模式◆支持安全相关的功能与应用- 满足IEC60730 CLASS B 标准1.2 产品对比注:(1) 通过系统配置寄存器设置APROM和BOOT空间大小,APROM与BOOT空间总共最大为64KB。
第⼆章STM32的结构和组成2.5 芯⽚⾥⾯有什么STM32F103采⽤的是Cortex-M3内核,内核即CPU,由ARM公司设计。
ARM公司并不⽣产芯⽚,⽽是出售其芯⽚技术授权。
芯⽚⽣产⼚商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并⽣产整个芯⽚,这些内核之外的部件被称为核外外设或⽚上外设。
如:GPIO、USART(串⼝)、I2C、SPI等都在做⽚上外设。
ICode总线ICode中的I表⽰Instruction,及指令。
我们写好的程序编译之后都是⼀条条指令,存放在FLASH中,内核要读取这些指令来执⾏程序就必须通过ICode总线。
驱动单元DCode总线D表⽰Data,即数据,这要总线是⽤来取数的。
DMA系统总线⽤来传输数据,这个数据可以是在某个外设的数据寄存器。
被动单元内部的闪存存储器:即FLASH,我们编写好的程序就放在这个地⽅。
内核通过ICode总线来取⾥⾯的指令。
内部的SRAM:通常说的RAM,程序的变量开销都是基于内部的SRAM。
内核通过DCode总线访问。
FSMC:灵活的静态的存储器控制器。
AHB到APB的桥从AHB总线延伸出来的两条APB2和APB1总线,上⾯挂载着STM32各种各样的特⾊外设。
我们经常说的GPIO、串⼝、I2C、SPI这些外设在这条总线上,这是我们学习STM32的重点,重点、重点。
2.6存储器映射存储器映射:给存储器分配地址的过程。
存储器重映射:给存储器在分配⼀个地址就叫存储器重映射。
2.7寄存器映射给已经分配好的地址的⼜特定功能的内存单元取别名的过程就叫寄存器映射。
gd32f407的重映射函数(原创实用版)目录1.gd32f407 简介2.重映射函数的概念和作用3.gd32f407 的重映射函数实现4.gd32f407 重映射函数的应用5.总结正文一、gd32f407 简介gd32f407 是一款由 GD 公司推出的 32 位 MCU(微控制器单元),广泛应用于各种嵌入式系统中,如智能家居、工业自动化、消费电子等领域。
这款 MCU 具有高性能、低功耗、丰富的外设接口等特点,受到了广大开发者的青睐。
二、重映射函数的概念和作用在 gd32f407 中,重映射函数(Remap Function)是一种将外部设备地址映射到内部存储器地址的功能。
通过重映射,可以将外部设备(如 SD 卡、SPI 设备等)的地址映射到 MCU 内部的 SRAM 或 Flash 存储器中,从而实现外部设备与 MCU 内部存储器的高效数据交换。
三、gd32f407 的重映射函数实现在 gd32f407 中,重映射函数的实现主要依赖于其内置的硬件重映射控制器(Remap Controller)和软件配置。
具体实现步骤如下:1.配置重映射控制器:首先,需要对重映射控制器进行配置,包括设置重映射区域、重映射方式(如静态重映射、动态重映射)等。
2.设置重映射参数:根据实际需求,设置重映射参数,如外部设备地址、内部存储器地址、重映射长度等。
3.启动重映射控制器:配置完成后,启动重映射控制器,使其开始执行重映射操作。
4.软件操作:在软件层面,可以编写相应的程序,实现对外部设备的访问和数据传输。
此时,外部设备的地址将自动映射到内部存储器地址,从而简化了程序编写。
四、gd32f407 重映射函数的应用gd32f407 的重映射函数在实际应用中具有很高的价值。
例如,在嵌入式系统中,常常需要对外部设备进行数据读写操作。
通过使用重映射函数,可以简化程序编写,提高数据传输效率,降低系统功耗。
五、总结gd32f407 的重映射函数为开发者提供了一种便捷的方式,将外部设备的地址映射到内部存储器地址,实现了外部设备与 MCU 内部存储器的高效数据交换。
ARM处理器系统初始化过程1 禁止MMU,关闭中断,禁止cache;2 根据硬件设计配制好处理器时钟、DRAM时钟、定时器时钟;3 根据系统中所用的flash和DRAM芯片容量和电气参数设置它们的起始地址、容量、刷新频率等;4 将固化在flash芯片中的程序搬移到DRAM内存中;5 使能cache,使能MMU,跳转到DRAM内存中运行继续初始化,包括根据具体应用以及系统中的硬件配置初始化各个功能模块、安装好异常中断处理程序、使能中断等;6 进行操作系统相关初始化;禁止MMU,关闭中断,禁止cache通过写系统控制协处理器的寄存器1 的第0 位可以允许和禁止MMU。
在复位后这位是0,MMU 被禁止。
关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个程序输出打印内容,这样在打印机上就会乱得不得了,同时有两份以上的文件交错地打印在一张纸上。
像不可剥夺的资源,就一定要关闭中断,让它占有这个资源。
在ARM里,没有像x86那样有清除中断指令CLI。
那么在ARM里是怎么样实现关中断和开中断的呢?下面就来看看ARM的关中断和开中断实现。
void Lock(void){stmdb sp!, {r0}mrs r0, cpsrorr r0,r0,#0xC0msr cpsr_cxsf,r0ldmia sp!,{r0}}上面这段程序是通过设置CPSR的第6,7位来实现的,因为第6,7位是设置为1时,就不再响应中断。
void UnLock(void){stmdb sp!, {r0}mrs r0, cpsrbic r0,r0,#0xC0msr cpsr_cxsf,r0ldmia sp!,{r0}}上面是重新开中断的命令,同样是设置CPSR的第6,7位,但它的值是0,就可接收中断了。
如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实中这种关中断和开中断,就是进入临界区和退出临界区。
什么是寄存器主要内容如何辨别STM32芯⽚的正⽅向STM32芯⽚架构图什么叫存储器映射什么叫寄存器映射⼀:如何辨别STM32芯⽚的正⽅向看丝印左边逆时针为第⼀个引脚在芯⽚表⾯有⼀个⼩圆点逆时针为第⼀引脚⼆:STM32芯⽚架构图(对于这两个图的理解可以参考STM32参考⼿册驱动单元由ARM 粉⾊部分位外设由ST设计,主要学习APB1 APB2 两个总线(两个总线速度不同)中的外设)三:什么叫存储器映射存储器本⾝不具有地址信息,它的地址是由芯⽚⼚商(ST)或⽤户分配,给存储器分配地址的过程就称为存储器映射。
给存储器分配地址的过程叫存储器映射,再分配⼀个地址叫重映射。
下图中的block0-7就相当于是存储器。
ARM的Cortex内核位32位,共有2^32=4GB的内存,ARM将4GB的内存分为8块,每块512Mb,分别位block0-7,如图其中ARM规定block0中,规定ST等这类公司只能将flash(程序)在其中,虽然由很多剩余,但仍要这么放置,为以后着想。
其他的block也规定。
下⾯我给出ARM规定block规定的block0-7放的相应外设图以及相应的地址(结合第⼆个图):我们在学习的时候主要学习block中的外设。
我们编程的时候主要是对block2中的外设对应的地址进⾏编程,然后通过GPIO输出相应的⾼低电平四:什么叫寄存器映射给有特定功能的内存单元取⼀个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
例如我们在51单⽚机中为什么可以⽤ P0=0xFF 点亮⼩灯;这是因为在其头⽂件中reg52.h中利⽤sfr这个关键字定义了 sfr P0=0x80;这就意味这我们可以⽤P0代表80这个地址单元。
但是在STM32中没有这个关键字。
那它是如何实现的呢,在STM32参考⼿册中GPIOx-ODR的低⼗六位全位1即可点亮16个⼩灯,我们取x位B端⼝,GPIOB的起始地址位0x4001 0C00-0x4001 0FFF在这段地址中有很多的寄存器包括ODR(偏移地址位0Ch),这ODR这个寄存的地址为0x4001 0c0c(绝对地址)。
复用功能重映射是指在芯片设计中,将一些原本设计用于特定功能的引脚或端口,重新映射为具有不同功能的引脚或端口,以实现更多的功能。
这种技术可以提高芯片的功能密度和灵活性,降低设计成本和生产成本。
具体来说,复用功能重映射可以通过以下两种方式实现:
1. 软件定义复用功能:通过软件编程,将原本设计用于特定功能的引脚或端口重新映射为具有不同功能的引脚或端口。
这种方式可以在芯片设计完成后,通过软件更新实现复用功能重映射,具有灵活性和可编程性强的优点。
2. 硬件定义复用功能:通过芯片硬件设计,将原本设计用于特定功能的引脚或端口重新映射为具有不同功能的引脚或端口。
这种方式需要在芯片设计阶段进行考虑和实现,具有设计周期短、成本低等优点。
复用功能重映射在芯片设计中应用广泛,可以用于实现多种不同的功能,例如传感器接口复用、存储器接口复用、网络接口复用等。
通过复用功能重映射技术,可以在不增加硬件资源的情况下,实现更多的功能,提高芯片的性能和功能密度,同时降低设计成本和生产成本。
第一章嵌入式系统概述1.嵌入式系统的概念从技术的角度概念:以应用为中心、以运算机技术为基础、软件硬件可裁剪、适应应用系统对功能、靠得住性、本钱、体积、功耗严格要求的专用运算机系统。
从系统的角度概念:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一路的运算机系统。
术语嵌入式反映了这些系统一般是更大系统中的一个完整的部份,称为嵌入的系统。
嵌入的系统中能够共存多个嵌入式系统。
2.嵌入式处置器的分类①嵌入式微处置器;②嵌入式微控制器;③嵌入式DSP处置器;④嵌入式片上系统(SOC)3.嵌入式操作系统的大体概念及特点一般实时操作系统应用于实时处置系统的上位机和实时查询系统等实时性较弱的实时系统,而且提供了开发、调试、运用一致的环境。
嵌入式实时操作系统应用于实时性要求高的实时控制系统,而且应用程序的开发进程是通过交叉开发来完成的,即开发环境与运行环境是不一致。
嵌入式实时操作系统具有规模小(一般在几K~几十K 内)、可固化利用实时性强(在毫秒或微秒数量级上)的特点4.实时操作系统的大体概念及特点总的来讲实时操作系统是事件驱动的,能对来自外界的作用和信号在限定的时刻范围内作出响应。
它强调的是实时性、靠得住性和灵活性, 与实时应用软件相结合成为有机的整体起着核心作用, 由它来管理和协调各项工作,为应用软件提供良好的运行软件环境及开发环境。
从实时系统的应用特点来看实时操作系统能够分为两种:一般实时操作系统和嵌入式实时操作系统IEEE 的实时UNIX分委会以为实时操作系统应具有以下的几点:异步的事件响应;切换时刻和中断延迟时刻肯定;优先级中断和调度;抢占式调度;内存锁定;持续文件;同步;5.操作系统的内核有哪两种,各自的特点①非占先式内核:非占先式内核要求每一个任务自我舍弃CPU 的所有权。
非占先式调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。
异步事件仍是由中断服务来处置。
中断服务能够使一个高优先级的任务由挂起状态变成就绪状态。
单片机元件名称及中英对照单片机是一种在微型计算机系统中占核心地位的集成电路,它包含了中央处理器(CPU)、存储器(ROM和RAM)、输入/输出接口等功能模块。
单片机元件名称在嵌入式系统开发中非常重要,能够准确理解和正确使用这些名称是进行嵌入式开发的基础。
下面,我们将介绍一些常见的单片机元件名称,并提供中英对照。
1. CPU(Central Processing Unit,中央处理器)CPU是单片机的核心部件,负责执行各种指令和控制系统的运行。
在单片机中,CPU通常由微处理器和寄存器组成。
2. ROM(Read-Only Memory,只读存储器)ROM是一种只能读取数据但不能写入数据的存储器,单片机中用于存储程序代码和常量数据。
常见的ROM包括EPROM、EEPROM和闪存。
3. RAM(Random Access Memory,随机存取存储器)RAM是一种能够读写数据的存储器,用于存储单片机运行时的变量和临时数据。
RAM具有较快的读写速度,但是数据在断电后会丢失。
4. 输入/输出接口(Input/Output Interface)输入/输出接口是单片机与外部设备进行数据交互的接口。
通过输入/输出接口,单片机可以接收外部设备的输入信号并向外部设备输出指定的数据。
5. 定时器/计数器(Timer/Counter)定时器/计数器是单片机中用于计时和计数的功能模块。
它可以根据外部触发信号或单片机内部时钟来进行计时和计数操作。
6. 中断(Interrupt)中断是单片机中的一种重要的事件处理方式。
当某个外部事件发生时,单片机会暂停当前的执行,并跳转到预设的中断处理程序中执行相应的操作。
7. 存储器映射(Memory Mapping)存储器映射是指将各种存储器元件(如ROM、RAM等)和外设接口按照一定的地址方式进行映射,并使其能够被CPU访问和操作。
8. 串行通信接口(Serial Communication Interface)串行通信接口是单片机与外部设备进行串行数据传输的接口。
存储器映射以及重映射代影珂,程帅旗摘要:本文讲的主要是存储器映射的相关内容。
包括片内外存储器(片内外Flash、SRAM)的简单介绍。
存储器映射即是存储器分配地址的过程,存储器的地址分配是在芯片生产时就已确定的,在对映射介绍时着重有关外设的映射,如AHB和VPB总线外设映射,对它们用图文并茂的形式作了全面的论述。
重映射是指系统中有部分存储单元可以同时出现在不同的地址上。
本文介绍了Boot Block(引导块)重映射与异常向量表的重映射及产生原因。
关键词:片内外存储器、存储器映射、存储器重映射、引导块、异常向量表Abstract: This article is discussing about the memory maps, which conclude internal memory and external memory (Flash, SRAM). The memory map is a process of distribution of memory address, the memory address allocation is set by the manufacturer when it is produced. We emphasize the peripherals ,such as the maps of AHB and VPB peripherals, when interviewing the maps with excellent picture and wonderful text. The memory remapping is a remapping process of the mapped memory, in this text, the Boot Block remapping and the remapping of the exception vector table is our key point ,and also the cause.Keyword: internal memory, external memory, memory remapping, Boot Block, exception vector table.一、片内存储器片内存储器包括片内Flash程序存储器、片内静态RAM(SRAM)。
计算机组成原理_存储器1. 存储器的分类2. 存储器的层次结构⼀般来说,存储器的速度越快,价格越昂贵,相应的容量越⼩。
存储器的层次结构主要体现在缓存-主存和主存-辅存这两个存储层次上。
① CPU和缓存、主存能够直接交换信息;②缓存能直接和CPU、主存交换信息;③主存可以和CPU、缓存、辅存直接交换信息;④辅存只能和主存直接交换信息。
缓存-主存层次主要解决CPU与主存速度不匹配的问题。
由于缓存的速度⽐主存的速度⾼,只要将CPU近期要⽤到的信息调⼊缓存,CPU就可以直接从缓存中获取信息,从⽽提⾼了访存速度。
主存-辅存层次主要解决存储系统的容量问题。
辅存的速度很低,不能直接与CPU进⾏信息交换,但其容量很⼤,可以⽤来存放⼤量暂时不需要信息。
缓存、主存、辅存的关系。
缓存、主存、辅存为当前计算机的三级存储系统,CPU⾸先访问速度最快的缓存Cache,⽽缓存中的数据由主存提供,称缓存中的数据为主存中数据的映射,主存中的数据是由速度最慢的辅存中获得的。
采⽤三级存储系统后,可以⼤⼤提⾼CPU⼯作效率。
3. 存储器的主要技术指标存储容量存储容量是指存储器中能存放⼆进制代码的总位数。
存储容量 = 存储单元个数 × 存储字长(单位为bit)存储容量 = 存储单元个数 × 存储字长 / 8 (单位为Byte)若MDR的位数为n,MAR的位数为m,则最⼤存储容量为 2^n × m存储速度存储速度是由存取时间和存取周期来表⽰的。
存取时间是指启动⼀次存储器读/写操作到完成该操作所需的全部时间。
存储周期是指存储器进⾏连续两次独⽴的存储器操作所需的最⼩时间间隔。
通常存取周期⼤于存取时间,存取周期 = 存取时间 +恢复时间存储器带宽存储器带宽指单位时间内存取的信息量,单位可以是Byte/s,bit/s等。
存储器的带宽决定了以存储器为中⼼的机器获得信息的速率。
4. 存储器的扩展由于单⽚存储芯⽚的容量总是有限的,很难满⾜实际的需要,因此必须将若⼲存储芯⽚连在⼀起,以扩展存储容量。
嵌入式芯片的存储器映射和存储器重映射1. 引言很多嵌入式芯片都集成了多种存储器(RAM、ROM、Flash、……),这些存储器的介质、工艺、容量、价格、读写速度和读写方式都各不相同,嵌入式系统设计需根据应用需求巧妙地规划和利用这些存储器,使得存储系统既满足应用对容量和速度的需求,又有较强的价格竞争优势。
本文所讲的存储器映射就是对各种存储器的大小和地址分布的规划。
存储器重映射就是为了快速响应中断或者快速完成某个任务,将同一地址段映射到不同速度的两个存储块,然后将低速存储块中的代码段复制到高速存储块中,对低速存储块的访问将被重映射为对高速存储块的访问。
2. 存储器映射(Memory Mapping)对于具体的某款嵌入式芯片,它包含的各种存储器的大小、地址分布都是确定的。
存储器映射(Memory Mapping)就是指(物理)地址到存储单元的一一对应(注意,本文中所讲的存储器映射不是指虚拟地址到物理地址的映射。
更确切地讲,本文所讲的存储器映射是存储布局(Memory Layout))。
同一类型的存储器称为一个存储块(Memory Block),也有的地方称为一个存储区域(Memory Area,Memory Region),嵌入式系统设计者通常会为一个存储块分配一段连续的物理地址。
多种存储器按某种方式排列,形成整个存储空间。
存储器映射可以理解为这样一个函数:输入是地址总线上的地址编码,输出是被寻址单元中(或数据总线上)的数据。
该函数是一个逻辑概念,计算机系统上电复位后才建立起这种映射,当计算机系统掉电后,这个函数就不复存在,只剩下计算机系统中实现这个函数的物理基础——电路连接。
也可以这样认为:存储器映射是计算机系统上电复位时的预备动作,是一个将CPU所拥有的地址编码资源向系统内各个物理存储器块分配的自动过程。
3. 存储器重映射(Memory Remapping)3.1 为什么需要存储器重映射目前很多嵌入式系统中的Flash分为Code Flash和Data Flash。
存储器映射和存储器重映射
1.1 什么是存储器映射?
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配的,给存储器分配地址的过程就称为存储器映射。
如图 1.所示。
图 1.1 映射原理图
在完成了存储器映射后,用户就可以按地址去访问对应的存储单元。
1.2 什么是存储器重新映射?
顾名思义,存储器重映射就是给存储单元再分配1个地址。
此时,该存储单元就有了两个地址。
用户可以通过这两个地址来访问该存储单元。
如图 1.1所示。
图 1.1 存储器重映射
1.3 为什么要进行存储器重映射?
在实际应用中,我们需要对某些存储单元再分配地址;此时,就要进行存储器重映射。
例如,异常向量表所在存储单元和Boot ROM都须进行重映射。
下面以异常向量表所在存储单元的重映射为例说明如下:
(1)用户程序总是从异常向量表开始执行
在ARM7编程中,异常向量表是用户程序的必备部分,程序流总是从异常向量表开始的。
(2)发生异常时,只能通过规定地址访问异常向量表
由ARM7体系结构可知,ARM7的异常向量地址始终是0x0000 0000~0x0000 001c 。
例如,复位时,CPU 会自动跳转到复位异常向量地址0x0处读取该处指令。
(3) 异常向量表所在的存储单元地址不固定
用户程序可以存储在片内RAM 、片内Flash 、片外存储器,随着存储位置的不同,用户程序的存储地址显然也不同;因此,作为用户程序一部分的异常向量表的存储地址也是不固定的。
如图 1.2所示。
0x0000 00000x0000 001C
0x4000 0000
0x4000 001C 0x8000 00000xE000 0000
0xFFF FFFF 0x8000 001C 不定
图 1.2 各异常向量表的实际位置
(4) 问题的提出
当异常向量表的实际存储地址并不在要求的0x0000 0000~0x0000 001c 范围时,那么发生异常时,CPU 怎样才能访问到异常向量表呢?
(5) 解决办法――存储器重映射
存储器重映射机制就是为了解决(4)所提的问题而设计的。
用户可通过存储器重映射,把地址0x0000 0000~0x0000 001c 再分配给异常向量表所在存储单元。
至此,CPU 内核既可以通过0x0000 0000~0x0000 001c 访问异常向量表,也可以通过异常向量表所在存储单元的实际地址来访问异常向量表。
例如:用户程序现存放在片外Flash ,该程序的异常向量表实际存储地址位于0x80000000~0x8000003C ;但通过存储器重映射,可将地址0x00000000~0x0000003C 分配给0x80000000~0x8000003C 的存储单元。
于是,用户既可以通过0x80000000~0x8000003C ,也可以通过0x00000000~0x0000003C 来访问异常向量表。
所以,发生异常时,CPU 虽然仍是访问0x00000000~0x0000003C 处,但仍可通过该地址访问到实际位于片外Flash 的异常向量表。
1.4 小结
由上述可知,存储器重映射的用途就是给存储器单元再分配1个地址,以解决一些实际需要。
应用存储器重映射机制的例子,除异常向量表以外还有Boot ROM 。
若您有兴趣,可参考我们的《深入浅出ARM7――LPC2300(上册)》中的“存储器重映射及引导块”小节。