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

article/2025/11/7 13:30:40

文章目录

    • 存储类型
    • 使用方法
    • 详细说明
      • 8051存储器结构
      • data
      • idata
      • bdata
      • pdata
      • xdata
      • code
    • 关于作者

参考来源:Keil > Help > uVision Help > Cx51 Compiler User’s Guide > Language Extensions > Memory Types

存储类型

Cx51编译器可以访问8051的所有存储区域,声明变量时可以指定分配的存储区,也可以基于内存模型配置进行隐式分配。

关键字存储空间地址范围访问方式
data内部RAM(低位128 bytes)0x00~0x7F直接寻址
idata内部RAM(全部256 bytes)0x00~0xFF间接寻址
bdata内部RAM(指定 16 bytes)0x20~0x2F位寻址/直接寻址
pdata扩展RAM(低位256 bytes)0x00~0xFF间接寻址
xdata扩展RAM(最大64K bytes)0x0000~0xFFFF间接寻址
codeFlash(最大64K bytes)0x0000~0xFFFF间接寻址

实际项目中经常用到的是 xdata, code

使用方法

变量声明/定义时,添加关键字data,idata,bdata,pdata,xdata,code。

unsigned char data  var1;
unsigned char code  text[] = "ENTER PARAMETER:";
unsigned char xdata array[100];
unsigned char idata x,y,z;
unsigned char pdata dimension;
unsigned char xdata vector[10][4][4];
unsigned char bdata flags;

MCU访问内部RAM时,读写速度比扩展RAM速度快。

因此在编写应用代码时,把频繁使用的变量放在内部RAM,使用较少的变量放在外部RAM。

Flash中的变量,只能进行读操作,掉电保存。

RAM中的变量,可以读写操作,掉电不保存。

详细说明

8051存储器结构

在这里插入图片描述

data

data只能声明变量,不能声明函数。

读写data变量时,MCU使用8位地址直接寻址内部RAM(低位128字节)。

优点是读写速度最快,缺点是可用空间太小。

idata

idata只能声明变量,不能声明函数。

读写idata变量时,MCU使用8位地址间接寻址内部RAM(全部256字节)。

可访问空间为内部RAM的全部256字节,其中低位128字节和data空间重复,只是访问方式不同。

bdata

bdata只能声明变量,不能声明函数。

读写bdata变量时,MCU使用8位地址位寻址/直接寻址内部RAM(部分16字节)。

可访问空间为内部RAM的16字节,地址范围为0x20~0x2F,位于data空间内部。

pdata

pdata只能声明变量,不能声明函数。

读写pdata变量时,MCU使用8位地址间接寻址扩展RAM(低位256字节,一个页)。

xdata

xdata只能声明变量,不能声明函数。

读写xdata变量时,MCU使用16位地址间接寻址扩展RAM(全部地址,最大64K字节)。

code

code可以声明常量,也可以声明函数。

读code常量时,MCU使用16位地址间接寻址Flash空间(最大64K字节)。

声明函数时,编译器默认隐式添加code关键字,用户不用处理。


本文完~

关于作者

微信公众号:萤火虫的电子笔记

分享电子产品开发软、硬件方面知识,51单片机、STM32、ARM、AltiumDesigner PCB设计、开发平台、软件工具等知识分享。

欢迎转发,请注明出处及作者。关注微信公众号,获取最新文章动态。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/dA14OBtL.shtml

相关文章

安装xdata步骤

1.修改配置文件/etc/security/limits.conf 修改配置文件/etc/security/limits.conf 在该配置文件中添加: vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535修改之后重新SSH连接即可,不需要重启主机或服务 2. 禁用禁用SELINUX …

ObjectARX开发笔记(二)——使用Xdata向AutoCAD图形追加自定义数据

1.自定义数据 ObjectARX开发过程中,有时会使用自定义数据,主要包括: 自定义对象——可以让用户按照自己希望的方式封装数据,并向AutoCAD中添加第三方实体类型,这些实体类型用于与AutoCAD自身实体一样的特性&#xff…

matlab xdata ydata,matlab中set(head1,'xdata',x1,'ydata',y1)什么意思?

满意答案 amuese6418 2014.10.25 采纳率:59% 等级:12 已帮助:8722人 这个主要是set的用法 它是功能 设置对象的属性。 用法 set(H,PropertyName,PropertyValue,…) 用属性值PropertyValue设置关于用参量H 标志的对象(一个或多个)的属性名P…

用Proteus仿真C51时用到xdata时的问题

在用做一个程序,但是51的内存资源太过稀有,使用到较大的数组的时候资源很快就耗尽了,可能会遇到以下错误: src\main.c(195): error C249: DATA: SEGMENT TOO LARGE这时需要用到大模式下编译。 然而在proteus下默认xdata是必须加…

xdata,volatile,extern,static,#pragma 关键字

1. xdata xdata:声明的变量位于外部 RAM 地址范围内某一位置。 2. volatile volatile: 的本意是“易变的” ,因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化。当要求使用 volatile 声明变量值的时候&#…

51 单片机 data idata xdata 使用

51 单片机 data idata xdata 使用 简介 该篇文章只提使用,先不详细讲解,使用的原因就是自己写的代码 ROM 超了!!!新建工程默认使用 data Keil 配置如下图 测试芯片FlashRAMSTC15W408AS8Kbyte512byte data idata xd…

TMS XData 4.6.0.1 Full Source XE2-DX10.3

TMS XData 4.6.0.1 Full Source XE2-DX10.3 用于多层REST / JSON HTTP / HTTPS应用服务器开发和ORM远程处理的Delphi框架。 TMS XData功能概述 基于REST / JSON架构样式的服务器 由于它是基于REST / JSON的,因此可以轻松地从不同的客户端平台(如.NET,Jav…

10.扩展数据(XData)

愿你出走半生,归来仍是少年! 环境:.NET FrameWork4.5、ObjectArx 2016 64bit、Entity Framework 6. CAD中所有数据库对象都包含一个可以供开发人员进行自定义的对象:XDATA,本文主要针对此对象进行探索。 XDATA的使用中需要使用到部分DXFCOD…

【51】单片机中的data、idata、xdata、code等关键字的作用

说明 data:RAM低128字节,响应速度最快,采用直接寻址方式 idata:RAM高128字节,采用间接寻址方式,速度相对较慢 bdata:片内RAM,位寻址方式 xdata:外部扩展RAM&#xff…

Kmeans算法

Kmeans算法 是最简单的聚类算法之一,算法接受参数 k ;然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得…

图像分割与实战(一)——基于主动轮廓(snake)的图像分割

1.主动轮廓图像分割算法的概述 1.1主要思想 将图像分割问题转化为轮廓进化问题 1.2工作原理 将一条曲线在内外力的共同作用下,使得曲线逐步收敛到目标轮廓 1.3 算法流程 初始化曲线利用内外力更新曲线判断曲线是否收敛,否则返回第2步 1.4 需要解决…

实时实例分割算法Deep Snake,速度32.3fps|CVPR 2020

论文提出基于轮廓的实例分割方法Deep snake,轮廓调整是个很不错的方向,引入循环卷积,不仅提升了性能还减少了计算量,保持了实时性,但是Deep snake的大体结构不够优雅,应该还有一些工作可以补,推…

数字图像处理笔记——Snakes算法、活动轮廓以及水平集(Snakes, active contours, and level sets)

Snakes算法 上一讲我们讲的图像分割算法主要是基于像素的,这一讲主要是基于曲线的。我们希望能得到一个能够包围住图像轮廓的平滑的曲线,snakes算法就是一个很有用的算法。首先我们将曲线的坐标x、y同一用参数s表示,s范围从0-1代表从起点绕曲…

Deep Snake for Real-Time Instance Segmentation:基于Deep Snake的实例实时分割

本文针对自己所看的 Deep Snake 做一个总结和存档,也方便其他同学学习 —— 阿波,2020.4.23 论文原文:Deep Snake for Real-Time Instance Segmentation 代码地址: snake 本篇文章工作有以下贡献: •提出了一种基于…

KMeans算法流程

一、什么是簇? 我们知道聚类就是让机器把数据集中的样本按照特征的性质分组,直观上来看,簇是一组一组聚集在一起的数据,在 一个簇 中的数据就认为是 同一类 ,簇就是聚类的结果表现。实际上簇并没有明确的定义&#xf…

HZNUCTF MISC Snake题解——python程序逆向,hashcat爆破sha256

目录 一.Dump得到pyc文件 二.pyc反编译得到py源码 三.分析程序逻辑 四.hashcat爆破 题目附件链接:https://pan.baidu.com/s/1CcS8BPGx8fKnsJgRvEi0bA?pwdt2yj 提取码:t2yj 一.Dump得到pyc文件 使用命令:python pyinstxtractor.py snake.exe 二.p…

DeepSnake实现实例分割

文章目录 简介:环境配置Demo实现全文总结参考文献 简介: DeepSnake(Deep Snake for Real-Time Instance Segmentation)作为CVPR 2020 oral论文,在实例分割任务上取得了实时分割效果的同时,还保持着非常不错的性能,该论…

【主动轮廓模型(二)】《GVF Snake》算法原理与OpenCV实现

文章目录 1 问题引入1.1 传统Snake模型的缺陷1.2 亥姆霍兹定理(Helmholtz theorem) 2 GVF Snake2.1 边缘图(Edge Map)2.2 梯度矢量流(Gradient Vector Flow,GVF)2.3 数值求解方法 3 OpenCV实现 …

用于实时实例分割的Deep Snake算法

第一部分:创新及其优点 第二部分:算法原理 第三部分:实验过程 第四部分:程序逻辑 1 创新及其优点 Deep Snake算法建立在传统Snake算法的基础上,将snake算法做成了轮廓结构化特征学习的方法,使用了循环卷积…

KMeans 算法(一)

K-means算法简述 K-means算法,也称为K-平均或者K-均值,一般作为掌握聚类算法的第一个算法。这里的K为常数,需事先设定,通俗地说该算法是将没有标注的 M 个样本通过迭代的方式聚集成K个簇。在对样本进行聚集的过程往往是以样本之间…