51单片机数组的定义方法(code与data的作用)

2023-05-16

数组前不加“code”或“data”,则默认将数组存放在程序存储器中;
code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变;
xdata 指定数据是存储在外部数据存储器了;
data 指定数据存储在内部低128字节数据存储器里,如果变量不指定存储位置,默认就是data型,这部分存储器寻址速度最快;
idata 指定数据存储在内部低256字节数据存储器里,但51只有128字节内部RAM,52才有256字节;
pdata 指定数据存储在外部低256字节数据存储器里,这时候寻址用8位寄存器R0和R1,而不用16位的DPTR,寻址速度比xdata快。

单片机C语言unsigned char code table[] code 是什么作用?

code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是), 因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM 的意思。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数 据进行运算处理,因此code区存储在什么介质上并不重要,像以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也 可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。

附:

c51中的存储类型

code :程序存储区(64KB),

data :可直接寻址的内部数据存储区(128B)

idata:不可直接寻址的内部数据存储区(256B)

bdata:可位寻址内部数据存储区(16B)

xdata:外部数据存储区(64KB)

pdata:分页的外部数据存储区

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


  

  

  

const 表示本数组不可修改 数组为常量数组 code 表示本数组生成后是在ROM区中 同样不可修改 idata 表示数组生成后在在0x00~0xff的256个RAM中,使用指针寻址 具体的参考下面 data,bdata,idata,pdata,xdata,code存储类型与存储区 bit是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,或者 8051 位可寻址 SFR 的一个位地址。 code是在 0000H—0FFFFH 之间的一个代码地址。 data是在 0—127 之间的一个数据存储器地址,或者在 128—255 范围内的一个特殊功能寄存器(SFR)地址。 idata是 0—255 范围内的一个 idata 存储器地址。 xdata 是 0—65535 范围内的一个 xdata 存储器地址。  

转载于:https://www.cnblogs.com/yuandongtao1989/p/6991587.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机数组的定义方法(code与data的作用) 的相关文章

  • 2.COM接口

    2 1 再谈接口与实现 其实从上一章 COM是个更好的C 43 43 可以看出 xff0c COM最重要的就是将接口与实现分离 上一章中接口定义头文件中采用C 43 43 抽象类的形式 xff0c 如果调用方是C 43 43 环境当然不会有
  • [QT]QMessageBox 的四种用法

    之前的一些QT笔记 xff0c 整理一下 void MainWindow on info clicked info QMessageBox information this 34 Title 34 34 Text 34 void MainW
  • svn执行update,却被告知database is locked

    svn执行update xff0c 却被告知database is locked xff01 执行 svn update xff0c 却抛出个错误警报 xff1a svn E200033 database is locked executi
  • ffmpeg解码RTSP/TCP视频流H.264(QT界面显示视频画面)

    源码下载地址 http download csdn net detail liukang325 9489952 我用的ffmpeg版本为 ffmpeg 2 1 8 tar bz2 版本低了恐怕有些头文件和API找不到 在Linux下解压后编
  • PCM音频文件格式的头信息

    一个裸的PCM格式音频数据 xff0c 如果不带头信息 xff0c 不知道其采样率等相关信息 xff0c 就无法用播放器播放出来 下面是默认的头信息格式 xff1a span class hljs comment 音频头部格式 span s
  • 解决cc1plus.exe: error: out of memory allocating

    QT中增加资源文件过大时 xff0c 会编译不过 xff0c 报错 xff1a span class hljs attribute cc1plus exe span span class hljs string out of memory
  • 单片机 APROM: RAM: Flash:区别

    APROM是用户程序存储区 xff0c 我们写的单片机的程序的代码 xff0c 就放在这里 APROM是 xff0c APROM是Flash中的一部分 RAM xff0c 随机存储器 xff0c 主要用来存放动态数据 xff0c 比如我们程
  • 改变全局变量值得两种方法

    方法一 xff1a 指针法 include lt iostream gt using namespace std void change int a void main int t change amp t 注意这里是传入变量的地址 xff
  • QT中为程序加入超级管理员权限

    QT的一些文件操作 xff0c 注册表的操作等 xff0c 有些操作会无效 xff0c 主要是因为没有对C盘的相关权限 解决方法 xff1a 1 mingw编译器 在pro工程文件中加入 span class hljs attribute
  • QT截图非顶层窗口的画面(获取窗口句柄)

    我们知道QT里截图的代码很简单 xff0c 很多例子都是截取桌面 xff0c 或截取整个屏幕 那如果要截取指定窗口的画面呢 xff1f 即使该窗口不在桌面最顶层显示 我们也能截到它的图片吗 xff1f 当然可以 xff0c 只要我们拿到该窗
  • QEventLoop会卡住的解决方法

    问题是这样的 xff1a 在一个线程中有下面一段代码 QEventLoop span class hljs keyword loop span span class hljs comment span span class hljs lab
  • android adb 模拟点击、滑动、输入、按键

    模拟输入 001 adb shell input text 001 模拟home按键 adb shell input keyevent 3 模拟点击 540 1104 坐标 adb shell input tap 540 1104 模拟滑动
  • 结构体在内存中的对齐规则

    一个结构体变量定义完之后 xff0c 其在内存中的存储并不等于其所包含元素的宽度之和 例一 xff1a include lt iostream gt using namespace std struct X char a
  • curl请求常用参数和返回码

    curl是一个用于传输数据的工具 xff0c 支持各种协议 xff0c 如HTTP FTP SMTP等 以下是一些常用的curl请求参数及其作用 xff1a X request xff1a 指定HTTP请求方法 xff0c 常见的有GET
  • ubuntu中python版本切换

    shell里执行 xff1a sudo update alternatives install usr bin python python usr bin python2 100 sudo update alternatives insta
  • CMAKE基础使用

    1 目录结构 xff1a 2 顶层cmake内容 xff1a span class token function cmake minimum required span span class token punctuation span V
  • URL格式

    一 URL基本格式 一个完整的url包含方案 用户名 密码 主机名 端口 路径 参数 查询和片段 xff0c 格式如下 xff1a lt scheme gt lt user gt lt password gt 64 lt host gt l
  • __IO uint16_t

    STM32里的类型定义 xff0c 见如下说明 xff1a typedef volatile unsigned short vu16 typedef IO uint16 t vu16 IO definitions access restri
  • 串口波形分析(TTL,RS232,RS485)

    TTL xff0c RS232 xff0c RS485波形分析 本文转自 xff1a http blog 163 com qiu zhi2008 blog static 60140977201092651854445 http www cn
  • Java数字类型转byte数组

    文章目录 方法1 自己写int转byte数组byte数组转int参考 xff1a https blog csdn net qq 41054313 article details 88424454 方法2 使用java NIO包的功能int转

随机推荐

  • 头文件和库函数的区别

    1 头文件中有函数的申明 xff0c 库文件实现函数的定义 比如 xff0c printf函数 使用时应包括stdio h xff0c 打开stdio h你只能看到 xff0c printf这 个函数的申明 却看不到printf具体是怎么实
  • C语言--字符串的截取

    今天碰到了一个字符串截取的功能实现问题 xff0c 比较常见所以就做下记录 一般的实现是这样的 xff1a include lt stdio h gt include lt string h gt int main void char de
  • 使用 JWT 让你的 RESTful API 更安全

    传统的 cookie session 机制可以保证的接口安全 xff0c 在没有通过认证的情况下会跳转至登入界面或者调用失败 在如今 RESTful 化的 API 接口下 xff0c cookie session 已经不能很好发挥其余热保护
  • CAN报文解析—案例

    1 CAN报文定义 CAN报文是指发送单元向接受单元传送数据的帧 我们通常所说的CAN报文是指在CAN线 xff08 内部CAN 整车CAN 充电CAN xff09 上利用ECU和CAN卡接收到的十六进制报文 2 CAN协议中CAN报文种类
  • 单片机中,intrins.h头文件中各函数详解:空指令_nop_(),移位函数_crol_、_cror_

    intrins h 在 C51单片机编程中 xff0c 我们经常使用到 nop 延时一个机器周期 如果晶振是12M xff0c 则延时1 us xff0c 该空函数在头文件intrins h中 头文件 INTRINS H 中的函数使用很方便
  • Linux 下模拟Http 的get or post请求(curl和wget两种方法)

    一 get请求 xff1a 1 使用curl命令 xff1a curl 34 http www baidu com 34 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl i 34 http www baidu co
  • QT入门基础认知(三个常用类、三种对话框类型、信号和槽)

    1 简单介绍 xff1a 1 1 三个常用类 xff08 Qwidget类 QDialog类 QMainwindow类 xff09 Qwidget类 xff1a 继承与QObject类和QPaintdevice类 xff0c 所有用户界面对
  • socket函数的domain、type、protocol解析

    socket 函数的 domain type protocol 解析 lxg 64 2015 04 09 内核中的 socket 概览 图一 xff1a socket 概览 内核中套接字是一层一层进行抽象展示的 xff0c 把共性的东西抽取
  • code的用法

    今天写程序的时候用了const xff0c 想到之前遇到的code的用法 xff0c 那是第一次遇到code的那样的用法 xff0c 查了一下 xff0c 解释如下 xff1a 在单片机使用C语言进行编程的时候 xff0c 经常使用到cod
  • Linux的system()和popen()差异

    Linux的system 和popen 差异 1 system 和popen 简介 在linux中我们可以通过system 来执行一个shell命令 xff0c popen 也是执行shell命令并且通过管道和shell命令进行通信 sys
  • HTTP的303、307状态码

    之前在 http权威指南 中看到了HTTP的307状态码 xff0c 当时因为没有找到可以实验的网站所以没有比较深的印象 xff0c 今天在排查一个问题的时候恰巧遇到了HTTP 1 1 307 TemporaryRedirect xff0c
  • 如果获得页面跳转的最终URL

    最近做一个小功能 xff0c 就是获取一个页面经过跳转后的最终页面URL xff0c 这里的跳转方式包含但不仅限于HTTP 301 302 js meta refresh 下面是我想到的三种可能的解决方式 xff0c 可能会有更优的方法 x
  • pykafka的NoBrokersAvailableError原因

    今天在使用pykafka的时候遇到一个问题 xff0c 我的kafka和zookeeper运行在一台机器上面 xff0c 然后应用程序跑在另外一台机器上面 当我调用pykafka中的KafkaClient zookeeper host 61
  • pyspark的pickle.PicklingError

    今天在用pyspark的时候在一个类中调用rdd的map的时候报错 xff0c 代码如下 xff1a rdd 61 df filter size df emission gt span class hljs number 50 span r
  • 一行代码引发的"血案"

    昨天在使用pykafka的时候又遇到了之前我遇到过的PartitionOwnedError ConsumerStoppedException异常 xff0c 关于这个异常我之前写过一篇分析的文章 链接在这里 xff0c 我自认为之前应该是把
  • X-Pack的machine learning

    如何使用X Pack的machine learning 最近在使用X Pack中的机器学习功能 xff0c 主要的就是利用非监督的时间序列模型 xff0c 用来检测流量的变化 xff0c 关于X Pack这块的文章好像可以参考的比较少 xf
  • C++自己写的HTTP类

    发起HTTP请求 define NORMAL CONNECT INTERNET FLAG KEEP CONNECTION define SECURE CONNECT NORMAL CONNECT INTERNET FLAG SECURE d
  • 知识总结--checksum校验和算法

    在项目开发过程中 xff0c 经常会使用到checksum检验和 xff0c 但是在不同的协议对接过程中发现checksum算法还是有差异的 本文的目的是对常用的checksum算法进行总结 xff0c 并不断完善和补充 xff0c 以备后
  • 让你编码嗨到停不下来的8个VSCode插件

    经作者授权后翻译成中文 xff0c 原文链接 xff1a https levelup gitconnected com 7 vs code extensions that make you want to keep coding forev
  • 51单片机数组的定义方法(code与data的作用)

    数组前不加 code 或 data xff0c 则默认将数组存放在程序存储器中 xff1b code 指定数据是存储在代码区 xff0c 数据是在编程的时候跟代码一起写入代码存储器 xff0c 运行过程中不能改变 xff1b xdata 指