1、data、idata、xdata 和 pdata 区别

从数据存储类型来说,8051 系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型。

使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。

与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别:

1)data 

固定指前面0x00-0x7f的128个RAM,可以用 acc 直接读写的,速度最快,生成的代码也最小。

2)idata

固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。

idata 是用类似C中的指针方式 访问的。

汇编中的语句为:mox ACC,@Rx

3)xdata

外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。  

4)pdata

外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的。

cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间)。

因此一般的做法是要将程序放到flash里面,然后load到ram里面运行的,DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。

2、Heap 布局

1)堆内存的大小可以通过INT_HEAP_LEN来配置;

2)可以在工程选项里定义OSALMEM_METRICS=TRUE,通过该宏使能的代码查看堆内存实时的使用情况,从而以此为指导配置出适合自己系统的堆大小;

3)如果需要详细的掌握stack里堆内存的管理细节,可以参考官方文档 Heap_Memory_Management.pdf。

示例:

INT_HEAP_LEN=3072

对于3K的大小是否适合我们的系统呢?

下面分析堆内存布局和当前系统堆内存利用率这两个方面,来进一步解答这个问题:

堆内存布局

首先,我们需要明确的是堆内存位于物理介质SRAM当中。

CC254x 是哈佛结构,代码空间与数据空间是独立寻址的。

SRAM 位于数据空间中,其映射方式下图:


SRAM被映射到xdata space的前8K(当前所用的CC2541 SRAM大小为8K),地址范围是0x0000 - 0x1FFF。

我们的heap配置的是3K大小,那它到底位于SRAM的哪里呢?

在OSAL_Memory.c中,找到下面的代码:

static osalMemHdr_t theHeap[MAXMEMHEAP / OSALMEM_HDRSZ];
static osalMemHdr_t *ff1; // First free block in the small-block bucket

这个数组就是整个的堆内存空间,只要找到theHeap的地址就能知道对内存的地址范围。

要获取theHeap的地址最简单的方法就是查看编译后生成的.map文件。下面是我当时摘取map文件中关于theHeap的片段:

 XDATA_ZRelative segment, address: XDATA 00000A79 - 00001678 (0xc00 bytes), align: 0Segment part 7.             Intra module refs:   osal_mem_allocosal_mem_initLOCAL                   ADDRESS         =====                   =======         theHeap                 00000A79

十六进制的0xc00等于3072,刚好是我们配置的堆内存大小,其地址范围是0x0A79 - 0x1678。

到目前就知道了如下两点:

heap位于ram当中;

heap的地址范围是0x0A79 - 0x1678,这个范围在每次修改程序后都有可能改变;

refer:

https://blog.csdn.net/w13687130701/article/details/50916112

【IoT】CC254x 中 data、idata、xdata 和 pdata 区别以及堆 Heap 内存布局相关推荐

  1. 51系列中data,idata,xdata,pdata的区别[笔记]

    51系列中data,idata,xdata,pdata的区别 data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. idata:固定指前面0x0 ...

  2. 在51系列中data,idata,xdata,pdata的区别

    单片机keil C中的data, bdata, idata, hdata, pdata, code解释 2016年03月11日 15:12:33 记忆之墙 阅读数:2375 标签: C51dataco ...

  3. 单片机c语言idata什么意思,单片机C语言中的data,idata,xdata,pdata,code

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  4. 单片机学习笔记——data,idata,xdata,pdata,code

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  5. 【C语言】[其他] :code, data, idata, xdata, bdata, edata, hdata等,代表的意思

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设 定 ...

  6. 8051单片机基础4:数据存储类型(data,idata,xdata,code)

    文章目录 存储类型 使用方法 详细说明 8051存储器结构 data idata bdata pdata xdata code 关于作者 参考来源:Keil > Help > uVisio ...

  7. 关键字data idata xdata code using

    1. data 指定数据存储在内部低128字节的数据存储器(RAM)内,即(0x00-0x7f)地址范围内,在定义变量时不指定存储区域,则默认为data类型,这部分存储区可用acc直接读写,片内直接寻 ...

  8. C51 data idata xdata 和栈 笔记

    data 区域0-128 idata 128-256 xdata 看芯片配置的大小. 上图可以设xdata的小这样就可以 在超出芯片资源的情况下,编译程序会报错. 一般先预配置为small 这样编译效 ...

  9. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

最新文章

  1. 功能测试Bug频发?测试工作中这点不可忽略
  2. MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...
  3. [HDOJ4588]Count The Carries(数学,规律)
  4. 策略模式在JDK 源码中的体现
  5. 微信小程序入门(一)
  6. oracle之基本的过滤和排序数据
  7. Master HA源码解析
  8. css3禅密花园叫什么名字_CSS秘密花园:灵活的椭圆形
  9. 第二阶段团队站立会议04
  10. Java基础知识强化54:经典排序之插入排序(InsertSort)
  11. php文字添加投影,PS如何制作文字投影效果 巧用4种方法给文字添加长投影效果...
  12. 如何用eclipse读取.txt文件
  13. 第十一周项目二----用二叉树求解代数表达式
  14. 如视VR显示连不上服务器,HTC Vive播放本地视频图文教程(附常见问题解决办法)...
  15. 关于微信授权登录的用户取消-2的问题
  16. 联想拯救者Y7000P和Y9000P的区别
  17. MD5加密——代码实现
  18. word保存html格式批注没有了,word批注不见了 怎么显示批注
  19. 电脑显示nt服务器发生错误,Windows NT常见问题(一)
  20. (Agora声网)多人视频聊天应用的开发(二)一对一聊天

热门文章

  1. marquee:已经被逐步舍弃掉的强大的模拟滚动的标签
  2. Java jre的安装与卸载
  3. 紘康单片机_紘康HY11P54 - SOC芯片 - 产品展示 - SOC芯片_IC芯片pcba开发_深圳市联泰威电子有限公司...
  4. 2008文件服务器迁移到2012,将文件服务器从2003迁移至Windows Server 2008 R2
  5. java如何避免内存溢出_java怎样防止内存溢出
  6. FileInputFormat接口实现类
  7. Java老鸟5年压箱底面试真题资料+自学手册,秋招拿下阿里45k offer
  8. [下载]Anger Birds 愤怒鸟的纸模型
  9. static变量总结
  10. 检查代码质量的插件Findbugs使用说明