存储器映射
- 格式:ppt
- 大小:1.47 MB
- 文档页数:22
ARM处理器系统初始化过程在嵌入式系统中,ARM处理器是最常用的处理器之一。
ARM处理器的系统初始化过程可以分为硬件初始化和软件初始化两个阶段。
本文将介绍ARM处理器系统初始化的具体流程。
硬件初始化在系统上电后,ARM处理器进入硬件初始化阶段。
主要任务是对处理器的外设进行初始化。
1.初始化时钟系统:ARM处理器的时钟系统是处理器运行的根底,因此在初始化过程中需要设置适当的时钟频率和时钟源。
这可以通过配置PLL〔Phase Locked Loop〕或者外部晶振来实现。
2.使能缓存:缓存是提高处理器性能的关键。
在初始化过程中,需要配置L1缓存和L2缓存的大小、映射方式等参数,并使能它们。
3.配置中断控制器:中断是处理器与外设交互的一种方式。
在初始化过程中,需要配置中断控制器,使其能够正确地响应外设发出的中断请求。
4.初始化外设:根据系统的需求,初始化各个外设,包括串口、SPI、I2C等外设。
这些外设的初始化过程涉及到设备的存放器配置、中断使能等操作。
5.设置存储器映射:ARM处理器通过存储器映射来访问外部存储器。
在初始化过程中,需要设置存储器映射表,使处理器能够正确地访问外部存储器。
软件初始化在硬件初始化完成后,ARM处理器进入软件初始化阶段。
主要任务是加载和运行操作系统及应用程序。
1.复位处理器:在软件初始化过程中,可以选择复位处理器,将处理器重新置于初始状态。
这通常通过将Reset引脚拉低来实现。
2.加载引导程序:引导程序是系统启动的第一段代码,其功能是加载操作系统的核心代码。
在软件初始化过程中,需要将引导程序加载到适当的内存位置,并设置处理器的执行起点。
3.初始化操作系统:一旦引导程序加载完成,操作系统开始初始化。
这包括初始化内核数据结构、初始化设备驱动程序、启动任务调度器等。
4.加载应用程序:在操作系统初始化完成后,可以选择加载应用程序。
应用程序的加载可以通过文件系统来实现,将应用程序从存储设备读取并加载到内存中。
Rev. 1.0012022-05-12HT16K33ARAM 映射16×8 带 按键扫描的LED驱动器特性•工作电压:4.5V~5.5V •内部RC 振荡器 •I 2C 总线接口•16×8位RAM 用于存储显示数据•最大显示模式为16×8:16SEGs 和8COMs •读/写地址自动递增•多达13×3按键矩阵扫描功能 •16阶调光电路•封装类型:20/24/28-pin SOP/SSOP应用领域•工业控制指示器•数字时钟、温度计、计数器、万用表 •机顶盒•录像机设备 •仪表读数•其它消费类应用 •LED 显示概述HT16K33A 是一款存储器映射和多功能LED 控制驱动芯片。
该芯片支持最大128点的显示模式(16SEGs ×8COMs)以及最大13×3的按键矩阵扫描电路。
HT16K33A 的软件配置特性使其适用于多种LED 应用,包括LED 模块和显示子系统。
HT16K33A 通过双向I 2C 接口可与大多数微控制器进行通信。
方框图VDDVSSSDASCLRev. 1.0022022-05-122019181716151413121112345678910VDD SDA SCL ROW0/K1ROW1/K2ROW2/K3ROW3/K4ROW4/K5ROW5/K6ROW6/K7VSS COM0/AD COM1/KS0COM2/KS1COM3/KS2COM4COM5COM6COM7ROW7/K8/INTHT16K33A 20 SOP-A/SSOP-A VDD SDA SCL ROW0/A1ROW1/A0ROW2/K1ROW3/K2ROW4/K3ROW5/K4ROW6/K5ROW7/K6ROW8/K7VSS COM0/AD COM1/KS0COM2/KS1COM3/KS2COM4COM5COM6COM7ROW11/K10/INTROW10/K9ROW9/K8HT16K33A 24 SOP-A/SSOP-A 242322212019181716151413123456789101112VDD SDA SCL ROW0/A2ROW1/A1ROW2/A0ROW3/K1ROW4/K2ROW5/K3ROW6/K4ROW7/K5ROW8/K6ROW9/K7ROW10/K8VSS COM0/AD COM1/KS0COM2/KS1COM3/KS2COM4COM5COM6COM7ROW15/K13/INTROW14/K12ROW13/K11ROW12/K10ROW11/K9HT16K33A 28 SOP-A/SSOP-A28272625242322212019181716151234567891011121314Rev. 1.0032022-05-12内部连接简图极限参数电源供应电压 ..............V SS-0.3V ~ V SS+6.5V 端口输入电压 .............V SS-0.3V ~ V DD+0.3V 工作温度 ................................. -40℃~ 85℃储存温度 ................................-60°C ~ 150°C注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性。
C++中使⽤内存映射⽂件处理⼤⽂件引⾔ ⽂件操作是应⽤程序最为基本的功能之⼀,Win32 API和MFC均提供有⽀持⽂件处理的函数和类,常⽤的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。
⼀般来说,以上这些函数可以满⾜⼤多数场合的要求,但是对于某些特殊应⽤领域所需要的动辄⼏⼗GB、⼏百GB、乃⾄⼏TB的海量存储,再以通常的⽂件处理⽅法进⾏处理显然是⾏不通的。
⽬前,对于上述这种⼤⽂件的操作⼀般是以内存映射⽂件的⽅式来加以处理的,本⽂下⾯将针对这种Windows核⼼编程技术展开讨论。
内存映射⽂件 内存映射⽂件与虚拟内存有些类似,通过内存映射⽂件可以保留⼀个地址空间的区域,同时将物理存储器提交给此区域,只是内存⽂件映射的物理存储器来⾃⼀个已经存在于磁盘上的⽂件,⽽⾮系统的页⽂件,⽽且在对该⽂件进⾏操作之前必须⾸先对⽂件进⾏映射,就如同将整个⽂件从磁盘加载到内存。
由此可以看出,使⽤内存映射⽂件处理存储于磁盘上的⽂件时,将不必再对⽂件执⾏I/O操作,这意味着在对⽂件进⾏处理时将不必再为⽂件申请并分配缓存,所有的⽂件缓存操作均由系统直接管理,由于取消了将⽂件数据加载到内存、数据从内存到⽂件的回写以及释放内存块等步骤,使得内存映射⽂件在处理⼤数据量的⽂件时能起到相当重要的作⽤。
另外,实际⼯程中的系统往往需要在多个进程之间共享数据,如果数据量⼩,处理⽅法是灵活多变的,如果共享数据容量巨⼤,那么就需要借助于内存映射⽂件来进⾏。
实际上,内存映射⽂件正是解决本地多个进程间数据共享的最有效⽅法。
内存映射⽂件并不是简单的⽂件I/O操作,实际⽤到了Windows的核⼼编程技术--内存管理。
所以,如果想对内存映射⽂件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识⾮常复杂,超出了本⽂的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。
底层逻辑第五章读书心得底层逻辑是计算机科学中一个重要的概念,它涉及到计算机硬件和软件的基本构成和运行机制。
在计算机科学的学习中,深入理解底层逻辑对于我们能够更好地理解计算机的工作原理和进行编程开发都具有重要意义。
最近我读了底层逻辑的第五章,下面我将分享一下我的心得体会。
第五章主要讲述了底层逻辑中的存储器和存储器层次结构。
存储器是计算机中用于存储数据和指令的设备,它直接影响到计算机的性能和运行速度。
在这一章中,我了解到了存储器的层次结构以及不同层次的存储器的特点和作用。
文章介绍了存储器的层次结构,包括寄存器、高速缓存、主存储器和辅助存储器。
寄存器是存储器层次结构中最快的存储器,用于存储计算机中最常用的数据和指令。
高速缓存是位于寄存器和主存储器之间的存储器,它可以加快数据的访问速度,提高计算机的运行效率。
主存储器是计算机中最大的存储器,用于存储当前正在运行的程序和数据。
辅助存储器是存储容量最大的存储器,用于长期存储数据和程序。
文章介绍了存储器的特点和作用。
不同层次的存储器具有不同的速度、容量和成本。
寄存器的速度最快,容量最小,成本最高,主要用于存储处理器的指令和数据。
高速缓存的速度次之,容量较小,成本较高,主要用于存储最常用的数据块。
主存储器的速度较慢,容量较大,成本适中,主要用于存储当前运行的程序和数据。
辅助存储器的速度最慢,容量最大,成本最低,主要用于长期存储数据和程序。
读完这一章后,我对存储器的层次结构有了更深入的理解。
不同层次的存储器在计算机的运行中扮演着不同的角色,相互协作,共同完成计算机的工作。
理解存储器的层次结构有助于我们合理地利用存储器,提高计算机的性能。
我还学习到了存储器的访问方式和存储器的映射方式。
存储器的访问方式有顺序访问和随机访问两种。
顺序访问是按照存储地址的顺序依次读取数据,而随机访问是通过地址直接访问指定的数据。
存储器的映射方式有直接映射、全相联映射和组相联映射三种。
直接映射是将主存储器的地址划分为若干个块,每个块对应一个高速缓存的行。
C55X DSP 的存储空间包括统一的数据/程序空间和I/O空间。
数据空间用于访问存储器和内存映射寄存器,程序空间用于CPU从存储器中读取指令,而I/O空间用于CPU与外设之间的双向通信。
1.存储器映射如下图所示,C55X的寻址空间为16MB,当CPU从程序空间读取程序代码时,使用24位地址,当访问数据空间时,使用23位的地址。
但是在访问数据空间时,将23位地址左移一位,并将地址总线上的最低有效位(LSB)置0,使得在对数据空间或程序空间寻址时,地址总线都传送24位地址。
数据空间被分成128个主数据页(第0页到第127页),每个数据页的大小为64K字,指令通过7位的主数据页值和16位的偏移值共同来确定数据空间的任何一个地址。
在第0主数据页中,前96个地址(00 0000h ~ 00 005Fh)为存储映射寄存器(MMR)保留,相对应在程序空间有192个地址(00 0000h ~ 00 00BFh),这段存储区为系统保留,用户不能使用该区。
2.程序空间当CPU读取指令时,程序空间才被访问。
CPU采用字节寻址来读取变长的指令,指令的读取吆喝32位的偶地址对其(地址的低2位为0)。
1). 字节寻址(24位)当CPU从程序空间读取指令时,采用字节寻址,即按字节分配地址,且地址为24位。
一个行宽为32位存储器的地址分配由下图说明,每个字节分配一个地址,例如字节0的地址是00 0100h,字节2的地址是00 0102h。
2). 程序空间的指令结构DSP支持8位、16位、24位、32位和48位长度的指令。
下表和下图说明了指令在程序空间如何存放。
在32位宽的存储器中存放了5条指令,每一条指令的地址是只最高有效字节的地址,阴影部分表示没有代码。
3)程序空间的边界对齐在程序空间存放指令时不需要边界对齐,当读取指令时要和32位的偶地址对齐。
也就是说,在读取一条指令时,CPU要从最低两位是0的地址读取32位的代码,这样地址其最低位应是0h,4h,8h和Ch。
2812存储器映射及CMD2812存储器映射2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。
32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。
其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0 xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。
2812的存储器被划分成了下面的几个部分:1. 程序空间和数据空间。
2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。
2. 保留区。
数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。
3.CPU中断向量。
在程序空间里也保留了64个地址作为CPU的32个中断向量。
通过CPU寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。
映射和空间的统一编址F2 812内部的映射空间低地址空间高地址空间2812CMD详解CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。
1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。
MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。
Cache与主存之间的全相联映射,直接映射和组相联映射的区别1.高速缓冲存储器的功能、结构与工作原理高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。
Cache的功能是用来存放那些近期需要运行的指令与数据。
目的是提高CPU对存储器的访问速度。
为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换;二是按一定原则对Cache的内容进行替换。
Cache的结构和工作原理如图2.3.1所示。
主要由三大部分组成:Cache存储体:存放由主存调入的指令与数据块。
地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。
2.地址映象与转换地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。
下面介绍三种地址映象的方式。
1.全相联方式地址映象规则:主存的任意一块可以映象到Cache中的任意一块(1) 主存与缓存分成相同大小的数据块。
(2) 主存的某一数据块可以装入缓存的任意一块空间中。
全相联方式的对应关系如图2.3.2所示。
如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。
图2.3.3示出了目录表的格式及地址变换规则。
目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位)。
由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。
举例:某机主存容量为1M,Cache的容量为32KB,每块的大小为16个字(或字节)。
划出主、缓存的地址格式、目录表格式及其容量。
容量:与缓冲块数量相同即211=2048(或32K/16=2048)。
优点:命中率比较高,Cache存储空间利用率高。
缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。
2.直接相联方式地址映象规则:主存储器中一块只能映象到Cache的一个特定的块中。
计算机存储面试常见题目
以下是一些常见的计算机存储面试题目:
1. 什么是存储器层次结构?描述每个层次的特点。
2. 什么是虚拟存储器?它如何工作?
3. 什么是缓存一致性?如何解决缓存一致性问题?
4. 什么是页面置换算法?描述常见的页面置换算法,例如FIFO、LRU和LFU。
5. 什么是闪存存储器?与传统硬盘存储器相比,它有哪些优势和劣势?
6. 什么是RAID存储?描述常见的RAID级别,例如RAID 0、RAID 1和RAID 5。
7. 什么是内存碎片?如何解决内存碎片问题?
8. 什么是写回(write-back)和写直达(write-through)缓存策略?比较它们的优缺点。
9. 什么是存储器映射文件(MMAP)?它在什么情况下使用?
10. 什么是反映射(demapping)和映射(mapping)?在虚拟内存系统中如何实现?
这些题目可以帮助面试者了解存储器的基本原理、常见算法和技术。
同时,面试者也可能会被要求解答一些与具体工作相关的问题,例如如何优化内存使用或解决存储系统问题。
stm32内存映射的原理STM32内存映射的原理是指将STM32芯片中所有的外设(如I/O端口、定时器、串口等)和存储器(如SRAM、Flash等)都映射到一个连续的地址空间内,方便访问和操作。
这个地址空间可以被认为是一个大的数组,每个元素代表一个外设或存储器单元,其中每个元素都有一个特定的物理地址。
在程序运行时,通过对这些物理地址的访问,就可以读写外设和存储器。
在STM32中,这个地址空间一般是32位的,可以表示4GB的空间。
但实际上并不是所有的地址都被用来映射外设和存储器,通常只有一部分被用来映射外设和存储器,而剩余的地址则没有任何用途。
此外,根据不同的芯片型号和具体的应用场景,内存映射的细节也可能有所不同。
在编写STM32的驱动程序时,需要使用寄存器和指针来访问内存映射中的外设和存储器。
具体来说,可以使用以下的方式来访问内存映射中的不同部分:- 对于内存中的数据,可以使用指向内存地址的指针来进行直接的读写操作。
- 对于外设的控制寄存器,通常需要先将其物理地址转换为虚拟地址并保存在指针中,然后使用指针来访问寄存器。
- 对于访问Flash存储器,需要使用特殊的指令来进行读操作,而写操作则需要先将Flash解锁,并按照特定的步骤进行操作。
- 对于存储器映射外设,可以使用类似于指针的方式来访问控制寄存器和数据寄存器。
除了这些基本的操作之外,还可以通过编写相应的驱动程序和接口,将内存映射中的不同部分整合起来,方便更高层次的应用程序进行调用。
例如,在通信领域中,可以通过将串口的控制寄存器、发送缓冲区和接收缓冲区整合在一起,实现对串口通信的封装和简化。
总的来说,STM32内存映射的原理是将芯片中的外设和存储器映射到一个连续的地址空间中,方便程序访问和操作。
在实际应用中,需要通过指针和寄存器等手段进行访问和控制,同时可以通过编写驱动程序和接口,将内存映射中的不同部分整合起来,方便更高层次的应用程序进行调用。
stm32存储器映射原理小伙伴!今天咱们来唠唠STM32的存储器映射原理,这就像是给STM32芯片里的各种东西安排住址一样有趣呢!你可以把STM32想象成一个超级大的公寓,里面住着各种各样的数据和程序。
这个公寓有好多不同的房间,每个房间都有它独特的用途,这就是存储器映射的概念啦。
在这个芯片公寓里,有不同类型的存储器。
比如说,有Flash存储器,这就像是公寓里的大仓库。
它用来存放那些不会轻易改变的东西,像程序代码之类的。
这个大仓库可重要啦,就像我们把家里的贵重物品和常用工具放在固定的地方一样。
程序代码就安安稳稳地待在Flash里,随时准备被调用执行。
然后呢,还有SRAM,这就像是公寓里的临时工作间。
当程序运行的时候,会产生很多临时的数据,这些数据就像一群忙碌的小工匠,它们在SRAM这个临时工作间里跑来跑去,干着各种各样的活儿。
比如说,变量的值就存在这里。
你可以想象成小工匠们在这里记录自己的工作进度呀,或者是临时存放一些材料什么的。
那这个存储器映射呢,就是给这些不同的存储器,也就是Flash、SRAM等,分配了特定的地址范围。
这就好比给公寓里的每个房间都编上了门牌号。
比如说,Flash 存储器可能被分配到从地址0x08000000开始的一大片地址空间,这就是它的专属区域啦。
就像住在这个公寓里的某个家庭有自己特定的楼层和房间号一样。
当CPU这个公寓管理员想要找某个数据或者程序的时候,它就根据这个地址去找。
就像我们要找某个小伙伴,知道他住在哪间房,就直接奔着那个门牌号去了。
比如说,CPU要执行一段程序代码,它就知道去Flash存储器对应的地址范围里找,因为那里是程序代码的“家”。
而且呀,这种存储器映射还有个好处呢。
它让整个系统看起来非常有条理。
就像公寓里的布局规划得很好,大家各司其职,不会乱成一团。
不同的外设,像定时器、串口等,它们也有自己对应的地址空间。
这就好比公寓里的各种设施,比如电梯、健身房之类的,也都有自己特定的位置编号。
全相连映射、组相连映射和直接映射是计算机科学中常见的术语,它们在计算机存储器和缓存系统中扮演着重要的角色。
通过深入探讨这些映射方式的特点和应用,我们可以更好地理解计算机存储器和缓存系统的工作原理和优化方法。
1. 全相连映射全相连映射是一种常见的存储器映射方式,它的特点是任何给定的存储器块都可以映射到存储器缓存的任何一个位置上。
任何一个存储器块都可以放置在缓存中的任意一个位置,只要这个位置没有被其他块占用。
在全相连映射中,当需要访问存储器块时,系统会先计算存储器块的位置区域在缓存中的映射位置,然后检查这个位置是否已经被其他块占用。
如果该位置已经被其他块占用,就需要进行替换操作。
全相连映射的优点是实现简单、应用广泛,但缺点是替换算法相对复杂,性能可能不如其他映射方式。
2. 组相连映射组相连映射是全相连映射的一种改进方式,它将缓存划分为多个组,每个组包含多个缓存行。
存储器块的映射位置由该块的位置区域的一部分决定,这样可以将存储器块映射到特定的组中。
在组内部,采用全相连映射的方式进行存储器块的替换操作。
组相连映射的优点是减少了替换操作的复杂性,提高了替换算法的效率;缺点是需要对存储器位置区域进行分组,增加了硬件的复杂性。
但是,相比于全相连映射,组相连映射在实际应用中更为有效。
3. 直接映射直接映射是另一种常见的存储器映射方式,它的特点是将存储器块映射到缓存中的特定位置。
这意味着每个存储器块只能映射到缓存中的一个固定位置,当需要替换时,只能替换该位置上的存储器块。
直接映射的优点是实现简单、硬件成本低,但缺点是可能会出现替换频繁的情况,导致性能下降。
在实际应用中,直接映射往往作为全相连映射和组相连映射的一种辅助方式来使用。
通过对全相连映射、组相连映射和直接映射的深入探讨,我们可以看到它们在计算机存储器和缓存系统中的重要性和应用价值。
在实际应用中,不同的映射方式可以根据具体的需求来选择,以达到最佳的性能和效率。
内存扩展技术原理
内存扩展技术是指通过各种方式将计算机的内存容量进行扩展,从而提高计算机的处理能力。
常见的内存扩展技术有虚拟内存、内存映射、内存缓存、内存互联等。
1. 虚拟内存:虚拟内存是一种利用硬盘作为辅助存储器的内存管理技术。
它通过将计算机内存分成若干个大小相等的页面或帧,将进程的逻辑地址空间映射到物理地址空间中的某个页面或帧上。
当进程访问的页面不在内存中时,系统会将需要的页面从硬盘读取到内存中,以满足进程的需求。
这样,虚拟内存能够使得计算机具有比物理内存更大的容量,提高计算机的处理能力。
2. 内存映射:内存映射是指将外部设备的寄存器或存储器映射到计算机的内存地址空间中。
通过内存映射,计算机可以像访问内存一样访问外部设备,从而简化了对外部设备的访问操作。
内存映射技术可以扩展计算机的内存容量,将外部设备的存储空间作为计算机的一部分来使用。
3. 内存缓存:内存缓存是指在CPU和内存之间插入高速的缓
存存储器,用来提高数据访问的速度。
内存缓存可以存储最近被访问过的数据块,当CPU访问内存时,先在缓存中查找数据,如果找到则直接返回,否则才访问主存。
内存缓存能够减少CPU与内存之间的数据传输次数,加快数据的读取和写入
速度,提高计算机的运行效率。
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、顺序映射2、链式映射(经常增删节点的复杂数据)3.索引映射(存储效率不高,常用方法)4散列映射五、数据元素的结构:集合、线性结构、树形结构、图状结构六、队列:限定了插入和删除操作的线性表八、树、①有且仅有一个特定的称为根的节点②当n>1时其余节点可分为m(m>0)个互不橡胶的有限级T1.T2…….Tm其中每一个集合本身是一棵树,称为子树。
九、二叉树的存储结构①顺序存储结构②链式存储结构十、算法通常由两种基本要素构成①对数据对象的运算和操作②算法的控制结构十一、算法:对某个问题处理方案的正确而完整的描述称为算法十二、数据结构:互相之间存在着一种或多种关系的数据元素的集合十三、完全二叉树:除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干缺点。
十四、二叉树①在二叉树的第i层至多有()个节点(I>=1)②深度为k的二叉树至多有()个节点③对任何一个二叉树T1,如果其终端节点数为n1,度为2的节点数为n2,则n1=n2+1 ④具有n个结点的完全二叉树的深度为k+1其中k是()的整数部分十五、度为0的结点(叶子节点)总是比度为2的结点多一个。
十六、如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1<=I<=n)有:①如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是节点k,其中k是i/2的整数部分②如果2i>n,则节点i无左孩子,否则其左孩子是节点2i③如果2i+1>n 则节点i无右孩子,否则其右孩子是节点2i+1十七、遍历:前序遍历;根左右中序遍历;左根右后序遍历;左右根十八、程序设计:指设计,编制,调试程序的方法和过程。
十九、程序设计风格:指编写程序时所表现出的特点、习惯和逻辑思路二十、消息机制统一了数据流和控制流二十一、结构化程序设计方法得重要原则是:自顶向下,逐步求精,模块化,限制使用goto语句二十二、顺序结构,选择结构,重复结构共同特征:严格的只有一个入口和一个出口二十三、对象的特点:①标示唯一性②分类性③多态性④封装性⑤模块独立性好二十四、面向对象设计方法的基本特征:封装,多态,继承二十五、计算机软件的构成;程序、数据、及相关文档二十六、计算机软件的定义:与计算机系统操作有关的计算机程序规则,以及可能有的文件文档及数据。
关于地址重映射1、通俗解释ARM芯片的地址重映射映射就是一一对应的意思。
重映射就是重新分配这种一一对应的关系。
我们可以把存储器看成一个具有输出和输入口的黑盒子。
如下图所示,输入量是地址,输出的是对应地址上存储的数据。
当然这个黑盒子是由很复杂的半导体电路具现的,具体的实现的方式我们现在不管。
存储单位一般是字节。
这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。
图1普通的单片机把可执行代码和数据存放到存储器中。
单片机中的CPU从储器中取指令代码和数据。
其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。
如下图,CPU读取0x00000000地址上存储单元的过程。
图 2ARM比较复杂。
ARM芯片与普通单片机在存储器地址方面的不同在于:ARM 芯片中有些物理存储单元的地址可以根据设置变换。
就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了。
图3是随意举了个例子(不要与ARM芯片对应),旨在说明地址重映射的过程。
图3表示把 0x00000000地址上的存储单元映射到新的地址0x00000007上。
CPU 存取0x00000007就是存取0x00000000上的物理存储单元。
图 3下面图4,图5是对ARM芯片的两种地址重映射方式的图示。
假设我们的应用程序存放在外扩 FLASH当中,那么应用程序的异常向量表就存放在0x80000000起始的64个(其中有32个存放异常向量)物理存储单元中。
但是ARM核发生异常(中断)后是从 0x00000000~0x0000003F地址范围取异常向量的。
所以要把0x80000000~0x8000003F范围内的存储单元重新映射到0x00000000~0x0000003F地址范围上。
以后CPU存取0x00000000~0x0000003F地址就是存取 0x80000000~0x8000003F范围内的存储单元。