unsigned char xdata与xdata unsigned char区别?

[复制链接]
9351|8
 楼主| 7120223 发表于 2010-4-12 10:10 | 显示全部楼层 |阅读模式
看了论坛里面以前关于这个方面的讨论,感觉还有不理解的地方。这些天我遇到一些情况:开始unsigned char xdata Task_Data[170][6];编译后code增加1000.发送数据也挺正常。但是就是在上电的瞬间,P2端口异常一下,后又恢复正常。当定义xdata unsigned char是code没有增加,上电后P2口正常。这个是什么原因?
 楼主| 7120223 发表于 2010-4-12 21:12 | 显示全部楼层
不能让我的帖子沉了
LYXQ 发表于 2010-4-13 10:04 | 显示全部楼层
用的啥单片机?第一次知道这还有区别
sytu_chyq 发表于 2010-4-13 11:19 | 显示全部楼层
这玩意怎么会跟code有关系呢?不解。。
john_light 发表于 2010-4-13 12:38 | 显示全部楼层
以下文字按个人理解译自Keil  Products Knowledge:
问:
在声明和存储空间有关的变量时,我应该用哪种格式?
[Data type] [Memory Space] Variable_name
或者
[Memory space] [Data type] Variable_name

答:
两个都可以接受(参看下面的说明以获得更多信息)。例如:
int data var;
data int var;
这两个声明都在data存储空间定义了一个整数。

需要注意的地方在和指针有关的复杂声明中,那里可能涉及几种存储空间。如:
data int *p;
定义了一个指向整数的一般指针p。它指向的整数可能存在任何存储空间中,然而该指针被保存在data存储空间。

int data *p;
定义了一个指定了存储空间的指针,该指针指向一个保存在data空间的整型数,指针被保存在缺省的存储空间(由Memory Model选择)。

xdata int data *p;
定义了一个保存在 xdata中的指针p,该指针指向保存在data中的整数。

注意老的变量定义方法:
[Memory space] [Data type] Variable_name
可能在以后的编译器版本中不再支持。因为变量如
[Data type] [Memory Space] Variable_name
般定义
而指针如
[Data type] [Data type Memory Space] * [Variable Memory Space] Variable_name
般定义会更好。

(例子略)


原文链接C51: CORRECTLY DECLARING VARIABLES WITH MEMORY SPACES
ayb_ice 发表于 2010-4-13 13:41 | 显示全部楼层

修改

本帖最后由 ayb_ice 于 2010-4-13 13:43 编辑

1# 7120223
非指针情况下一样,指针情况不一样。建议使用第一种。
 楼主| 7120223 发表于 2010-4-13 22:50 | 显示全部楼层
但是使用第一种,感觉有点我上面提到的问题啊芯片不正常。定义数组,应该和指针是属于同一类型的吧,我用的是W77E058.
 楼主| 7120223 发表于 2010-4-13 22:55 | 显示全部楼层
按照5楼翻译的,好像我是吧数组位置定义在SRAM中了,数据指向了别的地方,但是我定义的是170*6=1020这么多数据他是存储在那里的,搞不懂?
john_light 发表于 2010-4-14 09:39 | 显示全部楼层
编译链接完成时提示有data/xdata/code字节占用信息。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

389

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部