发新帖本帖赏金 2.00元(功能说明)我要提问
返回列表
打印
[51单片机]

51单片机 idata uchar *p; p指向哪里,指向内部ram?外部ram?还是rom

[复制链接]
2069|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spydf|  楼主 | 2015-9-16 16:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2015-9-16 17:04 | 只看该作者
idata不是说的很清楚吗
指向内部RAM

使用特权

评论回复
板凳
ddllxxrr| | 2015-9-16 20:11 | 只看该作者
楼上正解,在内部RAM中的IDADA部分

使用特权

评论回复
地板
无量寿经| | 2015-9-16 21:26 | 只看该作者
看了下面这个你就应该明白了,资料来源《51单片机轻松入门-基于STC15W4K系列》



使用特权

评论回复

打赏榜单

spydf 打赏了 1.00 元 2015-09-17

spydf 打赏了 1.00 元 2015-09-17

5
无量寿经| | 2015-9-16 21:36 | 只看该作者
2.2.4 指针:用于直接读取或修改内存值
1指针变量定义
变量指针:一个变量在内存中的起始地址称为这个变量的指针,说白了,指针就是地址。         
指针变量:专门用来存放其它变量起始地址的变量称为指针变量。  (▲最常用)  
指针变量定义简洁格式(符合标准C语言):所指变量类型 * 指针变量名         
完整格式(keil特有):所指变量类型<所指变量存储器空间> * <指针变量存储器空间> 指针变量名
比如:
char * Point;                  // 定义通用指针变量,跟标准C的定义方式一样。
unsigned char *cp1, *cp2;      // 同上,cp1,cp2用于存放字符型变量在内存中的起始地址。
char xdata * Point;            // 定义内存特殊指针,标准C不可以这样。
unsigned char xdata * data Point1; // unsigned char变量存储在xdata,指针变量本身存储在data。
说明:
①“*”表示该变量是指针变量,“*”与“指针变量名”之间一般不用空格,也可使用任意多个空格。
② “ 所指变量类型”要与实际定义的变量类型一致,同时有无前缀unsigned也要与实际变量一致,两者之一不满足编译时都会有警告:warning C182: pointer to different objects (报告指针使用不一致)。
③ <所指变量存储器空间>用于定义基于存储器的指针变量,也称为特殊指针变量,无此选项时,被定义为通用指针变量,这两种指针变量的区别在于它们的存储字节不同,通用指针变量与标准C语言兼容,在内存中固定占用3个字节,第一个字节存放指针变量所指变量的存储空间的编码(由编译时编译模式的值确定,见表2-9所示),第二和第三字节分别存放指针变量所指变量的高位和低位地址。  
                              表2-9 通用指针变量本身占用3字节空间
  
地 址
  
+ 0
+ 1
+ 2
内 容
存储器类型编码:
  
0x00—data/bdata/idata
  
0x01— xdata
  
0xFE— pdata
  
0xFF— code
指针所指变量地址高8位
指针所指变量地址低8位
通用指针变量本身默认存储在内部数据存储器data里,如果想指定指针变量的存储位置,可以在 * 后加上指针变量存储空间说明,示例如下:
char * data ptr;     // 与char * ptr;等价,即默认的定义方式,存放在片内RAM(0~127字节)。
char * idataptr;     // 指针变量存储在idata,内部RAM(0~255字节)。
char * xdataptr;     // 指针变量存储在片外RAM,64k 地址范围。
定义的通用指针变量运行速度比特殊指针要稍微慢一点点,但使用更简单,也方便程序移植。

使用特权

评论回复
发新帖 本帖赏金 2.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

136

帖子

3

粉丝