- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM关于地址重映射.doc
关于地址重映射
1、通俗解释
ARM芯片的地址重映射?映射就是一一对应的意思。重映射就是重新分配这种一一对应的关 系。?我们可以把存储器看成一个具有输出和输入口的黑盒子。如下图所示,输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体 电路具现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地 址对应的存储单元上存储的数据就会出现在数据总线上面。
?
图1?
普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。如下图,CPU读取0址上存储单元的过程。
?
???????????????????图 2?
ARM比较复杂。ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理 存储单元的地址可以根据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了。图3是随意举了个例子 (不要与ARM芯片对应),旨在说明地址重映射的过程。图3表示把 0址上的存储单元映射到新的地址0。CPU存取0是存取0的物理存储 单元。
?
??????????????????图 3?
下面图4,图5是对ARM芯片的两种地址重映射方式的图示。?假设我们的应用程序存放在外扩 FLASH当中,那么应用程序的异常向量表就存放在0始的64个(其中有32个存放异常向量)物理存储单元中。但是ARM核发生异常 (中断)后是从 00x0000003F地址范围取异常向量的。所以要把00x8000003F范围内的存储单元重新映射到 00x0000003F地址范围上。以后CPU存取00x0000003F地址就是存取 00x8000003F范围内的存储单元。图4只显示出第一个异常向量的地址重映射,整个异常向量表的地址重映射等同这个过程。?
?
图4?
图5?
图 5描述示了ARM芯片的另外一种映射方式。这个映射可以由用户决定采用还是不采用(相关代码在工程文件的startup.s中,这个文件是第三方提供,用 户可以修改)。这个映射主要是为了提高应用程序异常相应得速度。当我们把应用程序存放在片内FLASH的时候,异常向量表存放在 00x0000003F存储单元内。每次发生异常,CPU从00x0000003F地址上取异常向量。但是对 RAM的存取速度远高于对FLASH的存取速度,所以为了提高异常相应速度我们采取以下做法:
?Step?1:先把 00x0000003F(FLASH)存储单元内的异常向量表复制?到00x4000003F(片内RAM的最低端64个字节的存储单元)范围内存储单元中。?
?Step?2:把00x4000003F范围内存储单元地址重新映射 到00x0000003F地址范围。?这样做了以后,当异常发生的时候,CPU取异常向量就是从RAM区中的异常向量表中区,速度快 了。比如复位中断发生,CPU从地址0指令,但此时由于已经过地址重新映射,这个0地址转换器转换成 0CPU实际上是取的RAM区中0x400000000这个存储单元内的指令(异常向量)。?当然用户可以不进行这种映射。片内 FLASH中00x0000003F存储单元具有一模一样的异常向量表。只不过不进行这种处理,异常相应速度慢一点。但是这种速度上 的差别很多情况下是不必要在意的。
?????图中的地址转换器受控制寄存器MENMAP的控制,用户可以设置MENMAP实现对地址重映射的控制。这个地址转换器显然是通过内部硬件电路实现的。?
2、存储器的重映射
为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。重映射主要包括引导块“Boot? Block”重映射和异常向量表的重映射。
?2.1? 引导块“Boot? Block”及其重映射
?????? Boot? Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。这段代码在复位时被首先运行,主要用来判断运行 哪个存储器上面的程序,检查用户代码是否有
文档评论(0)