关于Keil C关键字xdata和data的问题

1.xdata表示这是一个外部RAM地址内的数据,数据最终将被保存至外部RAM的某个地址单元中;但是,外部RAM只能通过寄存器间接寻址来访问,也就是说,其地址需要保存在内部RAM中(其实或许是SFR中,8位地址一般是R0、R1,16位地址一般通过DPTR间址)这里,DPTR里保存的内容就相当于指向外部RAM单元的指针了…… 所以,用了内部数据类型(data)的指针,和外部数据类型(xdata)2. 这里变量pAddress应该是指针型变量,所以给pAddress赋值应是外部地址, *pAddress才是在外部RAM地址的内容,因此它的数据类型是xdata(换句话说,pAddress是指针,*pAddress是指针指向的数据)
时间: 2024-10-09 07:45:24

关于Keil C关键字xdata和data的问题的相关文章

关于keil单片机编程中的data,idata,xdata,pdata,code数据类型

从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系

51单片机的idata,xdata,pdata,data的详解

data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小.  bit :是指0x20-0x2f的可位寻址区 idata:固定指前面0x00-0xff的256个RAM,其中前128和dATa的128完全相同,只是因为访问的方式不同.  idata是用类似C中的指针方式访问的.  汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idATa做指针式的访问效果很好) xdATa: 外部扩展RAM,一般指外部0x0000-0xffff空间,用

C51中的xdata

今天在写公司芯片对应的.H文件时,在定义寄存器的时候出现一个问题. 我们芯片的寄存器地址是定义在片外RAM区的,不能使用sfr这样的关键字来进行定义. 后来查阅了对应的资料才发现定义寄存器有很多种方法,不同存储区域的寄存器定义的方式也是不一样的. 对于处于片外RAM的寄存器我们需要使用xdata关键字定义. http://www.51hei.com/mcu/3993.html http://blog.chinaunix.net/uid-25562715-id-315902.html 这两篇文章对

mysql的load data,高速将文本文件,插入数据库中

1语法 LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt' [ REPLACE | IGNORE ] INTO TABLE tbl_name [ FIELDS [ TERMINATED BY 'string' ] [ [OPTIONALLY] ENCLOSED BY 'char' ] [ ESCAPED BY 'char'  ] ] [ LINES [ STARTING BY 'string' ] [

一个因xdata声明引起的隐含错误

我们知道一般增强型c51自身的RAM只有128BYTES,根本不够用,所以一般在定义全局变量,静态变量时都要用XDATA作为关键字修饰数据的的存储类型.但要注意的是,定义和声明一定要一致,不然出现错误很隐蔽,很难发现这个问题.拿我一个项目中的从外部SPI FLASH接口读出数据的教训来举例: 测试发现如果传递一个结构体变量的地址(或指针)就能得到结果,而实际的接收BUFF是一个结构体数组,不管我一什么方式引用其某个元素的首地址就是得不到结果,一直在纠结结构体数组和结构体变量调用的区别的泥淖里出不

C51学习笔记

转自:http://blog.csdn.net/gongyuan073/article/details/7856878 单片机C51学习笔记 一,   C51内存结构深度剖析 二,   reg51.头文件剖析 三,   浅淡变量类型及其作用域 四,   C51常用头文件 五,   浅谈中断 六,   C51编译器的限制 七,                        小淡C51指针 八,                        预处理命令                        

C51

该文章的内容仅限于STC15F2K60S2单片机的程序设计 一.常用功能 1.逻辑运算和位运算, 1.逻辑运算符:与(&&),或(||):非(!): 返回0为假,1为真,运算符连接的多为条件语句,例如 (a<10)&&(b==1); 2.位运算符 位与(&),位或(|),位异或(^),取反(~),左移(<<),右移(>>) 位运算符出现的时候,都需要将运算数变成二进制形式,进行位运算,其中位与可以用于清0,位或可以用于置1,对于有符号数

GCC的编译和安装 很好的资料

http://blog.csdn.net/yrj/article/details/492404 1.GCC的编译和安装2.预处理    #define 可以支持不定数量的参数.    例子如下:    #define err(...) fprintf(stderr,__VA_ARGS__)    err("%s,%d/r/n","The error code:",48);    扩展为:    fprintf(stderr,"%s,%d/r/n"

Echarts简单应用

在对比了HighCharts之后,因为版权问题,还是决定在项目中采用Echarts来做图表展示. Echarts更新速度很快,已经更新到Echarts3了,感觉3的表现更炫.更酷,据说性能更好,但考虑到项目的整体风格,还是采用Echarts2的版本.  在项目正式开始之前,做个一个简单的Demo,结合EasyUI的Grid呈现一个柱状图,后期再考虑对Echarts的js进行二次封装. Echarts的使用跟HighCharts很类似,之前基于HighCharts做了一个Demo之后,熟悉了这类框