ARM的存储器映射与存储器重映射

ARM的存储器映射与存储器重映射机制 ARM的存储器映射与存储器重映射机制    今天终于明白了ARM的存储器映射与存储器重映射机制,我觉得这一切都是为了中断向量得到有效的执行啊。下面可以进一步了学习啦!     先前在课上在听老师讲ARM的存储器映射与存储器重映射时,听明白了ARM的存储器映射是怎么个回事!            1.存储器映射:处理器产生的地址按其某种规则转移到具体的物理地址;用户可见的,开机后固定 阅读详情

ARM的存储器映射与存储器重映射

 

存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。

    ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说, 0X00000000依次开始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存储器 0X80000000,VPB(低速外设地址,如GPIO,UART)——0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器) ——从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。

     由于系统在上电复位时要从0X00000000 开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK 区域,这就是重映射,这样访问<2G即<0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。

       BOOTBLOCK运行完就是要运行用户自己写的启动代码了,而启动代码中最重要的就是异常向量表,这个表是放在FLASH的头部首先执行的,而异常向量表中要处理多方面的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ(中断) ,FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器,BOOTBLOCK,SRAM中固化的,不可能都由用户直接定义,所以还是需要重映射把那些异常向量表的地址映到总表中。

--------------------------------------------------------------------------------------------------------

为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。重映射主要包括引导块“Boot  Block”重映射和异常向量表的重映射。

 1.引导块“Boot  Block”及其重映射

       Boot  Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。这段代码在复位时被首先运行,主要用来判断运行哪个存储器上面的程序,检查用户代码是否有效,判断芯片是否被加密,系统的在应用编程(IAP)以及在系统编程功能(ISP)等。

       Boot Block存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间,但也有其他的LPC系列不占用FLash空间的,而部分没有内部Flash空间的ARM处理器仍然存在Boot  Block。

       重映射的原因:

       Boot  Block中有些程序可被用户调用,如擦写片内Flash的IAP代码。为了增加用户代码的可移植性,所以最好把Boot  Block的代码固定的某个地址上。但由于各芯片的片内Flash大小不尽相同,如果把Boot  Block的地址安排在内部Flash结束的位置上,那就无法固定Boot  Block的地址。

       为了解决上面的问题,于是芯片厂家将Boot  Block的地址重映射到片内存储器空间的最高端,即接近2Gb的地方,这样无论片内存储器的大小如何,都不会影响Boot  Block的地址。因此当Boot  Block中包含可被用户调用的IAP操作的代码时,不用修改IAP的操作地址就可以在不同的LPC系列的ARM上运行了。

2.异常向量表及其重映射

      ARM内核在发生异常后,会使程序跳转到位于0x0000~0x001C的异常向量表处,再经过向量跳转到异常服务程序。但ARM单条指令的寻址范围有限,无法用一条指令实现4G范围的跳转,所以应在其后面的0x0020~0x003F地址上放置跳转目标,这样就可以实现4G范围内的任意跳转,因此一个异常向量表实际上占用了16个字的存储单元。以下为一张中断向量表:
                                    LDR     PC, ResetAddr
                                    LDR     PC, UndefinedAddr 
                                    LDR     PC, SWI_Addr
                                    LDR     PC, PrefetchAddr
                                    LDR     PC, DataAbortAddr
                                    DCD     0xb9205f80
                                    LDR     PC, [PC, #-0xff0]
                                    LDR     PC, FIQ_Addr

                    ResetAddr            DCD     ResetInit
                    UndefinedAddr      DCD     Undefined
                    SWI_Addr            DCD     SoftwareInterrupt
                    PrefetchAddr        DCD     PrefetchAbort
                    DataAbortAddr     DCD     DataAbort
                    Nouse                  DCD     0
                    IRQ_Addr             DCD     0
                    FIQ_Addr             DCD     FIQ_Handler

      重映射的原因:

      由于ARM处理器的存储器结构比较复杂,可能同时存在片内存储器和片外存储器等,他们在存储器映射上的起始地址都不一样,因此ARM内核要访问的中断向量表可能不在0x0000~0x003F地址上,因此采用了存储器重映射来实现将存在与不同地方的中断向量表都映射到0x0000~0x003F地址上。

      注意:Boot  Block 也存在中断向量表,而且复位后这段代码首先映射到 0x0000~0x003F地址上,也就是说复位后首先运行的是Boot Block程序。各个存储区域的中断向量表也不尽相同。

学习笔记——ARM Cortex-M0 存储器系统 1. Cortex-M0 的两种总线协议: 1)AHB_Lite 系统总线协议:32位地址线,高速高性能访问(Flash, SRAM,总线桥,外部存储器接口) 2)APB 外设总线协议: 32位, 外设等较慢设备通讯(I/O,Timer, UART, Watch Dog。) 系统总线和外设总线是相互分离的,两种总线通过总线桥连接通讯,时钟频率控制不同,可能有多个外设总线段,并且 阅读详情

相关推荐

STM32(F407)—— 从启动流程透视存储器重映射的实战应用

本文深入解析STM32F407的启动流程与存储器重映射技术,详细介绍了硬件复位、时钟树初始化和C运行时环境构建等关键阶段。通过实战案例展示存储器重映射在Bootloader设计、中断向量表重定位和双Bank Flash操作中的应用,帮助开发者优化系统性能和解决常见启动问题。

weixin_33314040的博客 317

ARM 重映射和映射

图中可以看出把0x00000000地址上的存储单元映射到了新的地址0x00000007上(重映射)。寄存器映射:对外设的操作原本是对外设的某些寄存器配置配置,但是把这个寄存器“链接”到地址上,就相当于对这个地址处的存储器操作就等价于对外设的操作,叫寄存器映射。在ARM微控制器设计中,给物理存储器分配逻辑地址的过程就称为存储器映射。把某个存储器(系统最开始默认的地址的存储器)重映射(重新分配)到一个新地址,对新地址的访问就相当于对系统最开始默认地址访问。ARM芯片中有些物理存储单元的地址可以根据设置变换。

payphone15423的博客 644

从零地址到代码执行:ARM Cortex-M内核启动流程的硬件视角

本文深入解析ARM Cortex-M内核从硬件复位到代码执行的启动流程,重点阐述地址重映射的硬件实现原理及其与BOOT引脚配置的协同工作。通过分析STM32的SYSCFG模块和启动模式,为开发者提供系统设计、多引导程序实现和高级调试技术的实用指南。

hill8的博客 1087

01_ARM架构内存映射简介

ARM架构内存映射简介

欢迎私信、留言交流 1211

仪表数字图像识别的传统方法

虽然现有很多机器学习算法能够准确地识别数字,但是传统方法对于一些需要离线识别且计算能力有限的下位机设备来说,仍然有非常不错的效果。因此,今天就向大家讲解一下传统的数字识别方法在仪表读数方面的应用。 1.图像预处理技术 1.1 主要流程 图像处理依次需要进行图片预处理、字轮区域定位、字符分割和字符识别等过程。其中图像处理流程如下图所示。 2. 详细过程 2.1 灰度化 为了减小图像原始数据量,本系...

XYZ 4521

解密Android相机框架:从HAL到应用层的全链路解析

本文深入解析Android相机框架的全链路架构,从应用层到硬件抽象层(HAL)再到驱动层,详细介绍了CamX-CHI架构的设计哲学与实战应用。通过HAL3接口、V4L2交互机制及Camera2 API的最佳实践,帮助开发者优化相机性能,解决多摄切换、预览卡顿等常见问题,提升成像效率与稳定性。

weixin_29238147的博客 407

SOC小知识: IAP与ISP 功能的区别

铺垫:以前要烧录代码 bin 文件到单片机内部的 Flash 当中的时候,需要借助专用的烧录器来进行,比较麻烦。 1、ISP: in-system-programming 在系统编程,不需要专门的烧录器来进行烧录。 本质:是通过 PC 机通过串口,将bin文件分包发送到单片机,单片机接受到 RAM 当中,然后再通过操纵 Flash 的接口函数,将 bin 文件写入到 Flash 当中。 2、IAP:in-application-programming 在应用编程,在线升级。 核心:ISP 是利用单片机

vincent3678的博客 3117

【CMU-自主导航与规划】Autonomous Exploration Development Environment 实战:从环境搭建到多场景测试

本文详细介绍了CMU开源自主导航开发环境(Autonomous Exploration Development Environment)的实战部署与测试。内容涵盖从Ubuntu与ROS环境搭建、仿真场景配置,到核心导航模块(地形分析、局部避障、航点跟踪)的深度解析,并演示了如何集成TARE探索与FAR规划等上层算法,最终指导连接真实SLAM与实车部署,完成多场景性能评估。

weixin_29215391的博客 704

STM32存储器映射

本章详细介绍STM32存储器映射以及寄存器操作

bliu2_10的博客 2202

Python爬虫教程:抓取Android或iOS应用中的数据

随着智能手机的普及,移动应用程序已经成为我们生活中不可或缺的一部分。从社交媒体、在线购物到金融服务和健康管理,几乎所有领域都有相应的手机应用程序(App)服务用户。而这些应用程序通常会存储大量的数据,例如用户行为、产品信息、订单记录等。如果我们能有效地抓取这些数据,可以为数据分析、商业智能、用户行为分析等提供有力支持。本文将重点介绍如何使用Python爬虫技术抓取Android或iOS应用中的数据,尤其是如何从这些应用的后端接口、存储、或网页中提取数据。我们将探讨如何通过反向工程技术访问移动应用中的API接

2201_76125261的博客 799

5、自动化代码结构与运维系统的优化

本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。

pp12345的博客 71

LPC-ARM的存储器映射与存储器重映射

存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。 ARM7TDMI的存储器映射可以有0X00000000~0XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说, 0X000000...

weixin_30672295的博客 154

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 160

ARM的存储器映射与存储器重映射【转载】2009-12-14 10:29最近在用LPC2148,看到了一篇文章,感觉很有帮助,就转了过来。

ARM的存储器映射与存储器重映射【转载】2009-12-14 10:29最近在用LPC2148,看到了一篇文章,感觉很有帮助,就转了过来。 arm处理器本身所产生的地址为虚拟地址,每一个arm芯片内都有存储器,而这个芯片内的存储器的地址为物理地址。我们写程序的目的是为了利用芯片内的存储器,因此我们要知道存储器的地址,即物理地址,所以虚拟地址和物理地址之间必然存在一定的转换关系,这就是映射。把虚拟地址按照某种规则转换成物理地址的方法就为存储器映射。物理地址表示了被访问的存储器的位置。存储器映射有两种映射规则

diligentcat的专栏 1189

Python实现多元线性回归(Multiple Linear Regression)

多元线性回归是一种用于建立多个自变量与因变量之间关系的统计学方法。在多元线性回归中,我们可以通过多个自变量来预测一个因变量的值。每个自变量对因变量的影响可以用回归系数来表示。

优快云 精品推荐 4326

【原理图PCB专题】Cadence 17.4版本导出excel版本坐标文件

Cadence 17.4版本导出坐标文件往往都是txt格式,并且无标题、导出时间、导出设计工程多名称等信息。那么怎么样才能导出有带这些信息的excel版本并格式好看的坐标文件呢?

一点硬件 2763

STM32(F407)—— 存储区映射和存储器重映射

ArmCortex-M4处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储 数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器, 数据存储器,寄存器和I/O端口都在同一个线性的4 GB(Cortex-M4的地址总线宽度是32位的,最大地址为 0xFFFF FFFF)的地址空间之内。 1. 存储器映射 在明白什么是存储器映射前,我们需要明白什么是映射?在数学里,映射是个术语,指两个元素的集之间元素相互“对应”的关系,为名词。 图1 映射关系图 如图1所..

CynalFly的博客 8144

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ARM Cortex-M0(6)--- 存储器系统

ARM Cortex-M0 存储器系统   1. Cortex-M0 的两种总线协议:  1)AHB_Lite 系统总线协议:32位地址线,高速高性能访问(Flash, SRAM,总线桥,外部存储器接口)  2)APB 外设总线协议: 32位, 外设等较慢设备通讯(I/O,Timer, UART, Watch Dog。)  系统总线和外设总线是相互分离的,两种总线通过总线桥连接通讯,时钟频率控...

zhangbijun1230的专栏 2337

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

嵌入式芯片的存储器映射和存储器重映射

转:http://blog.sina.com.cn/s/blog_77b7208f0100suxp.html 1. 引言 很多嵌入式芯片都集成了多种存储器(RAM、ROM、Flash、……),这些存储器的介质、工艺、容量、价格、读写速度和读写方式都各不相同,嵌入式系 统设计需根据应用需求巧妙地规划和利用这些存储器,使得存储系统既满足应用对容量和速度的需求,又有较强的价格竞争...

weixin_30659829的博客 517

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

程序存储器,BootLoader和存储器重映射

Cortex-M0处理器的启动 当Cortex-M0处理器从复位中启动时,它会首先访问0地址的向量表,从而取得MSP的初始值和复位向量,然后它就可以从复位向量开始执行程序。要保证系统正常工作,系统中需要有合法的向量表和合法的程序存储器,这样处理器才不会执行恶意软件代码。 要实现这个目的,Flash存储器一般是从地址0开始的。不过,在用户编程以前,现在市场上的微控制器产品的Flash存储器中可能没有...

qq_45763093的博客 976

LPC2000系列学习笔记4--存储器映射控制

       对于一般的处理器,系统启动后是从0x00000000地址开始读取中断向量表并引导程序的。但利用LPC2000的存储器重映射功能,我们可以将中断向量表转移至其它存储器,而不一定要从0x00000000这个地址读取。        LPC2000的这个功能是通过存储器映射控制寄存器MEMMAP和BOOT管脚来实现的。 4.1        寄存器MEMMAP的取值 MEMMAP 功能  

温陵布衣的专栏 1757

LPC2000系列ARM处理器重映射原理

本文使用的处理器为PhilipsLPC2210,由于它的片内只集成了一块位于0x40000000~0x40004000,大小为16K的SRAM,因此扩展了一块位于0x80000000~0x801FFFFF,大小为2M字节的Flash。在实验中,程序将首先从外部Flash启动,然后将异常向量表从Flash存储器复制到片内SRAM中,并进行存储器重映射将异常向量表映射到片内SRAM。虽然本文的内容都是

夜影轩的专栏 2568

ARM体系结构与编程笔记

存储器映射基本概念 ARM处理器产生的地址叫虚拟地址,把这个虚拟地址按照某种规则转换到另一个物理地址去的方法称为地址映射。这个物理地址表示了被访问的存储器的位置。它是一个地址范围,该范围内可以写入程序代码。 存储器映射控制的必要性 为了让运行在不同存储器空间中的程序对异常进行控制。可以通过存储器映射控制,将位于不同存储空间的异常向量表重新映射至固定地址0x00~0x3F处,以实现异常向量表的

狒狒也是程序猿的专栏 2106
上一篇: 51首电视台使用频率最高经典背景音乐
下一篇: ARM amba总线介绍
lemon_fantasy
博客等级 码龄18年 38粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值