ROM或者闪存,叫程序存储区,写的程序是存在这里面的,上电后从这里面执行。程序存储区也分为片内和片外,闪存或者罗不管是片内还是片外的,只能用来定义常量,是用代码来修饰。也就是说,用代码来修饰的东西,在程序运行过程中,不能修改。

51-RAM

  • 内部RAM的低128位(00-7F),对应Ç语言就是数据;直接或间接寻址内部RAM的0×20~值为值为0x2F是一块可位寻址区,对应于Ç语言的BDATA。
  • 内部RAM的高128位(80-FF),对应Ç语言就是IDATA;间接寻址。
  • IDATA的范围是256位(00-FF),可以看出IDATA是包含数据(00-7F)的,区别只是寻址方式不同,同时在80〜FF,这块片内RAM通常用于中断和函数调用的堆栈,一般不区使用的的.idata是用类似ç中的指针方式访问的。
  • 特殊功能寄存器(SFR)
  • 外部RAM 64K(0000-FFFF)。前256个算是一页,这一页比较特殊,是用pdata来修饰的,当然,也可以用xdata来修饰。除了第一页的256个以外的其他65280个空间,只能用XDATA来修饰;

向地址80H地址写一个数值,内部的高128位RAM?还是SFR?是用指令。

直接寻址 访问的就是SFR
R0或者R1间接寻址 内部高128位RAM
DPTR或者是R0,R1间接寻址且配合的是MOVX指令 访问外部外部RAM中地址

存储类型与存储区关系

  • data --->可寻址片内ram
  • bdata --->可位寻址的片内ram
  • idata --->可寻址片内ram,允许访问全部内部ram
  • pdata --->分页寻址片外ram(MOVX @ R0)(256 BYTE /页)
  • xdata --->可寻址片外ram(64k地址范围FFFFH)
  • code --->程序存储区(64k地址范围),对应MOVC @DPTR

8051 CPU核心是一个单周期8051兼容的核心。它有三个不同的内存访问总线(SFR,DATA和CODE / XDATA),具有对SFR,数据和主SRAM的单周期访问。它还包括一个调试接口和一个18输入的扩展中断单元.CPU和内存的详细功能将在第2章中介绍。

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

内存仲裁程序是系统的核心,因为它通过SFR总线将CPU和DMA控制器与物理内存和所有外设连接起来。仲裁内存器有四个内存访问点,其中的访问可以映射到三个物理内存中的一个:RAM,闪存和XREG / SFR寄存器。内存仲裁程序负责执行对同一物理内存的同时内存访问之间的仲裁和排序。

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

这是低功耗应用程序的一个重要特性。

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

32,64,96,128或256 kb的闪存块为设备提供了在线可编程的非易失性程序内存,并映射到CODE和XDATA内存空间。除了保存程序代码和常量之外,非易失性内存还允许应用程序保存必须保存的数据,以便在重新启动设备后可用例如,使用这个特性可以使用保存的特定于网络的数据,从而避免完全启动和网络查找-连接过程的需要。

8051 CPU架构有四个不同的RAM内存空间.8051有独立的内存空间用于程序内存和数据内存 .8051内存空间如下(详见2.2.1节和2.2.2节):

1,CODE。用于程序内存的只读存储器空间。这个内存空间的地址是64 KB。

2,DATA。可由单周期CPU直接指令或间接访问的读写数据内存空间。这个内存空间的地址是256字节。数据内存空间的下128字节可以直接或间接寻址,而上128字节只能间接寻址。

3,XDATA。读写数据内存空间,通常需要4-5个CPU指令周期来访问。这个内存空间的地址是64 KB【0-FFFF】。对XDATA内存的访问也比数据访问慢,因为CODE和XDATA内存空间在CPU核心上共享一个公共总线,因此不能与XDATA访问并行执行来自代码的指令预取。

4,SFR。读写一种寄存器内存空间,可由单个CPU指令直接访问。这个内存空间由128字节组成。对于地址可被8整除的SFR寄存器,每个位也可以单独寻址。

这四个不同的内存空间在8051架构中是不同的,但是在设备中有部分重叠,以简化DMA传输和硬件调试器操作。

不同的内存空间如何映射到三个物理内存(闪存程序存储器,SRAM和存储器映射寄存器)在2.2.1和2.2.2节中进行了描述。

内存映射内存映射与标准8051内存映射在两个重要方面不同,如下所述。

首先,为了允许DMA控制器访问所有物理内存,从而允许不同8051内存空间之间的DMA传输,将SFR和DATA内存空间的部分映射到XDATA内存空间(见图2-1)。

其次,可以使用两种替代方案进行代码内存空间映射。

如图1所示,第一种方案是标准8051映射,其中只有程序内存(即闪存)映射到CODE内存空间。该映射是设备重置后的默认映射,如图2-2所示。

2,第二种方案用于从SRAM执行代码。在这种模式下,SRAM映射到0x8000到(0x8000 + SRAM_SIZE - 1)的区域,映射如图2-3所示。从SRAM执行代码可以提高性能并降低功耗。

XDATA的上32 KB是一个只读区域,称为XBANK(参见图2-1)。任何可用的32 KB闪存blonk都可以在这里映射。这使得软件可以访问整个闪存。这个区域通常用来存储额外的常量数据。有关所有8051内存空间映射的详细信息在2.2.2节中给出。

图2-1到图2-3给出了显示不同物理内存如何映射到CPU内存空间的内存映射图。可用闪存库的数量取决于闪存大小选项。

128byte SFR地址---> xdata [7080-70FF];

256byte DATA地址---> xdata [0000-1FFF];

CPU的内存空间:

XDATA内存空间.XDATA内存映射如图2-1所示。

1,SRAM映射到地址范围0x0000到(SRAM_SIZE - 1)。若SRAM_SIZE = 8 kb【0x0000-0x1FFF】
2,XREG区域映射到1 KB地址范围(0x6000-0x63FF)。这些寄存器是附加寄存器,有效地扩展了SFR寄存器空间。一些外围寄存器和大多数无线电控制和数据寄存器都映射在这里。
3,SFR寄存器映射到地址范围(0x7080-0x70FF)。
4,闪光灯信息页(2KB)映射到地址范围(0x7800- 0x7FFF的)这是一个只读区域,包含有关设备的各种信息
.5,XDATA内存空间的上32 KB(0x8000-0xFFFF)是只读闪存代码库(XBANK),使用MEMCTR.XBANK [2:0比特,可以映射到任何可用的闪光空白
0.6,闪存,SRAM和寄存器到XDATA的映射允许DMA控制器和CPU访问单个统一地址空间中的所有物理内存
0.7,写入内存映射(图中阴影部分)未的实现的区域读取数据将返回0×00。对只读区域(即闪烁区域)的写操将被忽略 。
如图8所示,代码的内存空间.CODE存空间为64 KB,分为公共区域(0x0000k - 0x7FFF的的)。和银行区域(0x8000-0xFFFF),如图2-2所示公共区域总是映射到银行区域可以映射到任何可用的32 KB闪存银行(从0到7,共256k)。可用闪存银行的数量取决于闪存大小选项。使用闪存银行 - 较低的32 KB物理闪存(银行0)。选择寄存器FMAP选择闪存银行。在32 kb的设备上,没有闪存可以映射到银行区域。从该区域读取数据将在这些设备上返回0×00。
9,允许程序执行从SRAM,可以SRAM映射到低银行区域的范围从0 x8000-(0 x8000 + SRAM_SIZE - 1)。其余的当前选择的bank仍然是映射到的地址范围(0 x8000 + SRAM_SIZE) - 0 xffff。设置MEMCTR.XMAP位启用此功能
.10,CODE的内存空间.CODE内存的8位地址范围映射到SRAM的上256字节,即从(SRAM_SIZE - 256)到(SRAM_SIZE - 1)的地址范围。用于执行代码
0.11,SFR内存空间。通过这个内存空间可以访问128条目的硬件寄存器区域.SFR寄存器也可以通过地址范围(0x7080-0x70FF)的XDATA地址空间访问。一些特定于CPU的SFR寄存器驻留在CPU内核中,只能使用SFR内存空间访问它们,而不能通过映射到XDATA内存空间的重复映射访问它们。这些特定的SFR寄存器列在SFR寄存器中。

iamgeB iamgeA                    
126976 126976 BIM工程代码 0x0000-0x07FF   0 0 0 0      
  7 CODE_BEG 0x0830   800 1 1      
        1000 2 2      
        1800 3 3      
        2000 4 4      
        2800 5 5      
        3000 6 6      
  CODE_END 0x3FFF   3800 7 7      
8   CODE_BEG 0x4030   4000 8 8      
        4800 9 9      
        5000 10 10      
        5800 11 11      
        6000 12 12      
        6800 13 13      
        7000 14 14      
  CODE_END 0x7FFF   7800 15 15      
16   BANK1_BEG 0x18000   18000 16 0 1 10000 8000  
        18800 17 1      
        19000 18 2      
        19800 19 3      
        1A000 20 4      
        1A800 21 5      
        1B000 22 6      
        1B800 23 7      
        1C000 24 8      
        1C800 25 9      
        1D000 26 10      
        1D800 27 11      
        1E000 28 12      
        1E800 29 13      
        1F000 30 14      
  BANK1_BEG 0x1F000   1F800 31 15      
16   BANK2_BEG 0x28000   28000 32 0 2 20000 8000  
        28800 33 1      
        29000 34 2      
        29800 35 3      
        2A000 36 4      
        2A800 37 5      
        2B000 38 6      
        2B800 39 7      
        2C000 40 8      
        2C800 41 9      
        2D000 42 10      
        2D800 43 11      
        2E000 44 12      
        2E800 45 13      
        2F000 46 14      
  BANK2_BEG 0x2F000   2F800 47 15      
16   BANK3_BEG 0x38000   38000 48 0 3 30000 8000  
        38800 49 1      
        39000 50 2      
        39800 51 3      
        3A000 52 4      
        3A800 53 5      
        3B000 54 6      
        3B800 55 7      
        3C000 56 8      
        3C800 57 9      
        3D000 58 10      
        3D800 59 11      
        3E000 60 12      
        3E800 61 13      
        3F000 62 14      
  BANK3_BEG 0x3F000   3F800 63 15      
6   BANK4_BEG 0x48000   48000 64 0 4 40000 8000 BANK4用作存储常量数据段映射到代码段中
        48800 65 1    
        49000 66 2    
        49800 67 3    
        4A000 68 4    
  BANK4_END 0x4AFFF   4A800 69 5    
  10 BANK4_BEG 0x4B000   4B000 70 6    
        4B800 71 7    
        4C000 72 8    
        4C800 73 9    
        4D000 74 10    
        4D800 75 11    
        4E000 76 12    
        4E800 77 13    
        4F000 78 14    
  BANK4_END 0x4FFFF   4F800 79 15    
  16 BANK5_BEG 0x58000   58000 80 0 5 50000 8000 BANK5用作存储常量数据段映射到代码段中;BANK5数据会传输到XDATA的区域中去
        58800 81 1    
        59000 82 2    
        59800 83 3    
        5A000 84 4    
        5A800 85 5    
        5B000 86 6    
        5B800 87 7    
        5C000 88 8    
        5C800 89 9    
        5D000 90 10    
        5D800 91 11    
        5E000 92 12    
        5E800 93 13    
        5F000 94 14    
  BANK5_END 0x5FFFF   5F800 95 15    
  16 BANK6_BEG 0x68000   68000 96 0 6 60000 8000  
        68800 97 1      
        69000 98 2      
        69800 99 3      
        6A000 100 4      
        6A800 101 5      
        6B000 102 6      
        6B800 103 7      
        6C000 104 8      
        6C800 105 9      
        6D000 106 10      
        6D800 107 11      
        6E000 108 12      
        6E800 109 13      
        6F000 110 14      
  BANK6_END 0x6FFFF   6F800 111 15      
  13 BANK7_BEG 0x78000   78000 112 0 7 70000 8000  
        78800 113 1      
        79000 114 2      
        79800 115 3      
        7A000 116 4      
        7A800 117 5      
        7B000 118 6      
        7B800 119 7      
        7C000 120 8      
        7C800 121 9      
        7D000 122 10      
        7D800 123 11      
  BANK7_END 0x7E7FF   7E000 124 12      
    NV1     7E800 125 13      
    NV2     7F000 126 14      
    位锁页锁位页面     7F800 127 15      
          78000 128          
                       

CC2541 内存区域相关推荐

  1. 深入理解Java虚拟机——第二章——Java内存区域与内存溢出异常

    运行时数据区域 Java虚拟机运行时数据区域 程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条所需要执行的字节码指令,分支. ...

  2. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  3. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  4. 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析

    来自:好好学java 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这些知识之后,才能更好的进行Jvm调优或者更加深入的学习,本来这些知识是晦涩难懂的,所以希望能够 ...

  5. 听说又被 JVM 内存区域方面的面试题给虐了?看看这篇文章吧!

    作者:SnailClimb ,来自:JavaGuide 写在前面(常见面试题) 基本问题 •介绍下 Java 内存区域(运行时数据区)•Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚 ...

  6. java内存区域与内存溢出异常_Java内存区域与内存溢出异常

    Java的内存管理是一个老生常谈的问题,虽然Java号称可以自动管理自己的内存,使程序员从内存管理的围墙解放出来,但是一连串的内存泄漏和溢出方面的问题,使得我们不得不去深入了解Java的内存管理机制. ...

  7. 转载:Java 内存区域和GC机制

    原文链接:http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html 目录 Java垃圾回收概况 Java内存区域 Java对象的访 ...

  8. java基础---JVM---java内存区域与内存溢出问题

    ===?虚拟机运行时候内存主要有几块区域,是线程相关的吗,分别有什么作用? 程序计数器:线程私有,用来记录当前线程所执行的字节码的行数,使得在多线程执行的情况下线程切换后能回到正确的执行位置.程序计数 ...

  9. 学习jvm(一)--java内存区域

    前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着 ...

最新文章

  1. C#测试程序运行时间
  2. QTP操作xml文件方法
  3. ember.js_如何设置基本的Ember.js应用
  4. Java线程池ThreadPoolExecutor的实例
  5. 新年UI的拆红包源码/5级代理功能/会员中心充值接口完善
  6. spark指定python版本_1.Spark学习(Python版本):Spark安装
  7. Save our Scrum作者访谈
  8. [凯立德]2013夏季卓豪华版2686-2E23J0Dsp1自适应程序懒人包
  9. ZOJ4037 Peer Review
  10. 哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言
  11. 网上赚钱的好方法,实战案例讲解,让你秒懂赚钱的秘密!
  12. iPhone设备上安装beta版本系统,在浏览器中搜索网址 beta.apple.com
  13. js三元表达式使用方法概述
  14. 计算机软件技术基础2002,2002同济大学计算机软件技术基础试卷
  15. 8核插上4G翅膀 MT6595借Cortex-A17领跑
  16. Centos7 SSH远程登录十分缓慢的解决方案
  17. 哨兵2a 波段组合_遥感数据介绍—Sentinel 2A
  18. S7-1200控制5轴伺服程序案例 PTO伺服轴脉冲定位控制功能应用+速度模式应用+扭矩模式应用
  19. 点云匹配和ICP算法概述
  20. NOR FLASH工作原理

热门文章

  1. Spring Data Commons主要梳理
  2. 孟子曰:吾善养吾浩然之气
  3. [QGIS]常用操作--字段增删与数据过滤
  4. 秒杀系统设计思路与实战(含源码实现)
  5. JCL Procedure
  6. 大图书馆 #7 互联网企业服务架构书单
  7. 斜齿轮、圆锥齿轮、蜗轮蜗杆的旋向(螺旋线方向)、转向、圆周力、径向力、轴向力等的方向判断【小记】
  8. 会计准则中计算机软件费用摊销,财务软件累计摊销完的账务处理
  9. 第一章--Spring工厂设计模式消除耦合
  10. 如何解决:无法删除文件夹,目录不是空的。