精华内容
下载资源
问答
  • 存储器映射

    2019-12-19 13:51:26
    那么实际系统的存储器映射是什么样子的?对于一个典型的Cortex-M0微控制器,通常可以在其中找到以下部分: ■Flash存储器(用于程序代码); ■内部SRAM(用于数据); ■内部外设; ■外部存储器接口(用于外部存储器和外部...

    在这里插入图片描述
    那么实际系统的存储器映射是什么样子的?对于一个典型的Cortex-M0微控制器,通常可以在其中找到以下部分:
    ■Flash存储器(用于程序代码);
    ■内部SRAM(用于数据);
    ■内部外设;
    ■外部存储器接口(用于外部存储器和外部外设,这是可选的);
    ■其他外部外设的接口(可选)。
    将这些部件放到一起,就可以得到如图7.3所示的微控制器示例。

    在这里插入图片描述

    展开全文
  • 寄存器:特定功能内存单元的别名。 寄存器映射:给某个内存单元取别名并分配地址的这个过程叫做“寄存器映射”。 存储器映射:给存储器分配地址的过程。

    寄存器:特定功能内存单元的别名。

    寄存器映射:给某个内存单元取别名并分配地址的这个过程叫做“寄存器映射”。

    存储器映射:给存储器分配地址的过程。

    展开全文
  • 本文介绍了存储器映射和存储器重映射的概念、原理以及原因等内容。
  • 单片机存储器映射

    2018-06-07 08:48:24
    cc2530单片机为例,存储器映射相关内容。还有许多不足,希望大家多多包含。
  • 【嵌入式系统】存储器映射与寄存器映射原理 一、存储器映射 图1 存储器映射 存储器在产家制作完成后是一片没有任何信息的物理存储器,而CPU要进行访存就涉及到内存地址的概念,因此存储器映射就是为物理内存按一定...

    【嵌入式系统】存储器映射与寄存器映射原理

    一、存储器映射

    在这里插入图片描述

    图1 存储器映射

    存储器在产家制作完成后是一片没有任何信息的物理存储器,而CPU要进行访存就涉及到内存地址的概念,因此存储器映射就是为物理内存按一定编码规则分配地址的行为。值得注意,存储器映射一般是由产家规定,用户不能随意更改。
    在这里插入图片描述

    图2 STM32芯片存储器映射

    注1

    STM32中,I-Code Bus与D-Code Bus默认映射到0x00000000 ~ 0x1FFFFFFF内存地址段;AHB系统总线默认映射到0x20000000 ~ 0xDFFFFFFF和0xE0100000 ~ 0xFFFFFFFF两个内存地址段;APB外设总线默认映射到0xE0040000 ~ 0xE00FFFFF内存地址段,但由于TPIU、ETM以及ROM表占用部分空间,实际可用地址区间为0xE0042000~0xE00FF000

    二、寄存器映射

    寄存器映射是在存储器映射的基础上进行的。

    以STM32为例,操作硬件本质上就是操作寄存器。在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。当我们控制这些单元时就可以驱动外设工作,我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但若每次都是通过这种方式访问地址,不好记忆且易出错。这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名实质上就是寄存器名字。给已分配好地址(通过存储器映射实现)的有特定功能的内存单元取别名的过程就叫寄存器映射
    在这里插入图片描述

    图3 寄存器映射

    下面以GPIO寄存器CRL为例,先给出CRL定义如下:

    typedef struct
    {
      __IO uint32_t CRL;
      __IO uint32_t CRH;
      __IO uint32_t IDR;
      __IO uint32_t ODR;
      __IO uint32_t BSRR;
      __IO uint32_t BRR;
      __IO uint32_t LCKR;
    } GPIO_TypeDef;
    

    在实际使用时,会有GPIOA->CRL=0x0000 0000这种写法,表示将16进制数0赋值给GPIOA的CRL寄存器所在的存储单元。而GPIOA->CRL就构造了一个寄存器映射。具体过程如下:

    #define PERIPH_BASE      ((uint32_t)0x40000000) 
    

    这里属于存储器级别的映射,将外设基地址映射到0x40000000,可对应图2

    #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
    

    这里对外设基地址进行偏移量为0x10000的地址偏移,偏移到APB2总线对应外设区。

    #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
    

    这里对APB2外设基地址进行偏移量为0x0800的地址偏移,偏移到GPIOA对应区域。

    #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
    

    这里将GPIOA宏定义为GPIOA基地址经过强制类型转换为GPIO_TypeDef的指针,这样的作用是使GPIOA结构体内对应的成员按顺序填充内存区域,如图3所示。因此GPIOA的CRL寄存器就是作为GPIOA基地址后的第一个内存块,GPIOA->CRL的本质就是这个内存块的地址,或者说是用GPIOA->CRL给这个地址取了个形象的别名,即寄存器映射。

    展开全文
  • 详细介绍了ARM存储器映射原理,并以LPC2200为例说明BOOT LOADer 过程.
  • STM32存储器映射

    2020-12-10 12:00:50
    **STM32存储器映射** 1、Cortex-M3存储器映射 CM3的地址空间有4G,但它只对这4G空间作了预先的定义,把4G空间分成8个块,每块大小为512M,并指出各段该分给哪些设备。具体的实现由芯片厂商决定,厂商可以设计出具有...
                                        **STM32存储器映射**
    

    1、Cortex-M3存储器映射
    CM3的地址空间有4G,但它只对这4G空间作了预先的定义,把4G空间分成8个块,每块大小为512M,并指出各段该分给哪些设备。具体的实现由芯片厂商决定,厂商可以设计出具有自己特色的产品。下图是CM3的存储器映射图(来自CM3权威指南)。
    在这里插入图片描述
    1.1、 stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。

    RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。

    Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失,
    RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。

    STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。
    stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。

    一般情况下,程序文件是从 0x0800 0000 地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。
    在使用keil进行编写程序时,其编程地址的设置一般是这样的:
    在这里插入图片描述
    程序的写入地址从0x08000000(数好零的个数)开始的,其大小为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,大小为0x10000也就是64K的RAM。这与STM32的内存地址映射关系是对应的。

    M3复位后,从0x08000004取出复位中断的地址,并且跳转到复位中断程序,中断执行完之后会跳到我们的main函数,main函数里边一般是一个死循环,进去后就不会再退出,当有中断发生的时候,M3将PC指针强制跳转回中断向量表,然后根据中断源进入对应的中断函数,执行完中断函数之后,再次返回main函数中。大致的流程就是这样。

    1.2、 内部SRAM 区的大小是512MB,用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在这个区的下部,有一个1MB 的位带区,该位带区还有一个对应的32MB 的 “位带别名(alias)区”,容纳了8M 个“位变量”(对比8051 的只有128 个位)。位带区对应的是最低的1MB 地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用于取指。通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通内存一样地使用它们。位带别名区中的访问操作是原子的,消灭了传统的“读-改-写”三步曲。
    地址空间的另一个512MB 范围由片上外设(的寄存器)使用。这个区中也有一条32MB的位带别名,以便于快捷地访问外设寄存器。例如,可以方便地访问各种控制位和状态位。要注意的是,外设内不允许执行指令。
    还有两个1GB 的范围,分别用于连接外部RAM 和外部设备,它们之中没有位带。两者的区别在于外部RAM 区允许执行指令,而外部设备区则不允许。
    最后还剩下0.5GB 的隐秘地带,CM3 内核的闺房就在这里面,包括了系统级组件、内部私有外设总线s、外部私有外设总线s、以及由提供者定义的系统外设。私有外设总线有两条:
    AHB 私有外设总线,只用于CM3 内部的AHB 外设,它们是:NVIC, FPB, DWT 和ITM。
    APB 私有外设总线,既用于CM3 内部的APB 设备,也用于外部设备(这里的“外部”是对内核而言)。CM3 允许器件制造商再添加一些片上APB 外设到APB 私有总线上,它们通过ABP 接口来访问。
    NVIC 所处的区域叫做“系统控制空间(SCS)”,在SCS 里的还有SysTick、MPU 以及代码调试控制所用的寄存器,如下图所示
    在这里插入图片描述

    最后,未用的提供商指定区也通过系统总线来访问,但是不允许在其中执行指令。
    CM3 中的MPU 是选配的,由芯片制造商决定是否配上。
    上述的存储器映射只是个粗线条的模板,半导体厂家会提供更展开的图示,来表明芯片中片上外设的具体分布,RAM 与ROM 的容量和位置信息。

    2、STM32的存储器映射
    从STM32 datasheet上来看,不同的型号,其存储器映射有些不同。应该是以小容量、中容量、大容量来区别的,同一个容量的不同型号,其Flash、SRAM也有所不同,FSMC也不同。下面以STM32F103xx为例分别介绍之,以下数据均来自datasheet及STM32参考手册。

    2.1 小容量STM32F103x4、STM32F103x6存储器映射图
    在这里插入图片描述

    2.2 中容量STM32F103x8、STM32F103xB存储器映射图
    在这里插入图片描述

    2.3 大容量STM32F103xC、STM32F103xD、STM32F103xE存储器映射图
    在这里插入图片描述

    总结:上面三幅图中红色字标明了同种容量的芯片的SRAM和Flash大小,不同容量的芯片其外设不一样,但同一外设对应地址是一样的,如果没有相应外设,该地址则保留。拿TIM来说,大容量有TIM2-TIM7,而小容量只有TIM2和TIM3,但它们(TIM2、TIM3)映射的地址却相同,小容量中向上多出的空间则保留,因此RTC在各容量芯片上对应的起始地址都是0X4000 2800。同理SRAM和Flash也是一样。

    2.4 SRAM
    STM32F10xxx内置了最多为64K的SRAM,它可以以字节、半字(16位)或全字(32位)访问。SRAM的起始地址是0X2000 0000

    2.5内部Flash的构成:
    STM32 的内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及大小如下:
    在这里插入图片描述
    a、主存储器:一般我们说 STM32 内部 FLASH 的时候,都是指这个主存储器区域它是存储用户应用程序的空间,芯片型号说明中的 1M FLASH、 2M FLASH 都是指这个区域的大小。与其它 FLASH 一样,在写入数据前,要先按扇区擦除,
    b、系统存储区:系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、 USB 以及 CAN 等 ISP 烧录功能。
    c、OTP 区域:OTP(One Time Program),指的是只能写入一次的存储区域,容量为 512 字节,写入后数据就无法再更改, OTP 常用于存储应用程序的加密密钥。
    d、选项字节:选项字节用于配置 FLASH 的读写保护、电源管理中的 BOR 级别、软件/硬件看门狗等功能,这部分共 32 字节。可以通过修改 FLASH 的选项控制寄存器修改。

    资料来源:https://blog.csdn.net/leo_ouyang/article/details/17317799
    https://blog.csdn.net/qq_33559992/article/details/77676716

    展开全文
  • FPGA双端口存储器映射优化算法.pdf
  • 存储器映射 程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。也就是被总线连接的部分。我们在编程的时候,也是对这些功能部件进行操作。存储器本身不具有地址信息,它的地址是由芯片...
  • Cortex‐M3-存储器映射

    2020-09-04 16:41:44
    Cortex‐M3 存储器映射由半导体厂家说了算,Cortex‐M3 预先定义好了“粗线条的”存储器映射。通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。结果...
  • 虚拟存储器之存储器映射

    千次阅读 2016-03-12 00:23:10
    Linux通过将一个虚拟存储器区域与磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射.虚拟存储器可以映射到两种类型对象中的一种: 1):文件系统中的普通文件:一个区域可以映射到一个...
  • 存储器映射 存储器空间 Cortex‐M3 支持4GB 存储空间。整块4G存储器开始地址标为0x0000_0000,结束地址为0xFFFF_FFFF,地址的位数是32位,那么2^32=4,294,967,296。 由于一个基本的存储单元是8bits即1Byte(每个...
  • s3c6410存储器映射.txt

    2011-05-28 08:59:17
    s3c6410存储器映射。存储器的映射对应关系。
  • 存储器映射和重映射

    2020-09-06 09:51:48
    存储器本身并不具备地址,将芯片理论上的地址分配给存储器,这就是存储器映射。 1M寄存器原本并没有地址,我们将1M存储器映射到理论地址0往后的1M范围,这1M存储器就有了0~1M的地址。 地址线所产生的0~1M的地址信号...
  • 文档介绍了ARM开发教程之存储器映射概念,arm7TDMI的存储器映射,ARM开发教程之存储器映射,ARM开发教程之存储器重映射
  • 文章目录1 Cortex-M3中的存储器映射 1 Cortex-M3中的存储器映射 Cortex-M3中的预定义的存储器映射,如下图,注意,这里指的是规范,实际厂家并不一定完全按照这个规范做。 SRAM:片内RAM,用于存放堆栈、变量等数据...
  • 寄存器点亮LED灯,存储器映射,寄存器映射 存储区区域功能的划分的过程,将存储器分为不同的Block,每个Block有其对应的地址,给存储器分配地址的过程就叫存储器映射。 每个单元有不同功能,可控制对应的...
  • 存储器映射文件

    2013-08-26 11:39:59
    存储器映射文件允许我们创建和修改那些因为太大而不能放入内存的文件。有了存储器映射 文件,我们就可以假定整个文件都在内存中,而且可以完全把它当作非常大的数组来访问。 这种方法极大地简化了用于修改文件的...
  • 连接上篇博文,先说说存储器组织 ...存储器本身不具有地址信息,其地址由芯片厂商或用户分配,这个分配地址的过程就叫存储器映射,给存储器再分配一个地址就叫存储器重映射。 在这8 个BLock里,最...
  • Cortex M3存储器映射

    千次阅读 2016-04-08 08:51:06
    CM3 只有一个单一固定的存储器映射。这一点极大地方便了软件在各种 CM3 单片机间的移植。 存储空间的一些位置用于调试组件等私有外设,这个地址段被称为“私有外设区”。私有外设区的组件包括:闪存地址重载及断点...
  • 存储器映射归纳

    千次阅读 2011-09-10 00:23:38
    首先说明一点:只要是基于ARM7内核的处理器,其中断都是从0x00-...处理器的存储器映射可以归结为三种情况: 1 没有存储器的映射 这样的处理器有:三星的S3C44BX处理器。没有存储器映射的处理器,其BANK地址是固定的
  • 1.存储器映射 STM32F1的系统结构 存储器映射 STM32F1的存储器的映射 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,919
精华内容 24,367
关键字:

存储器映射