打印

unsigned char xdata与xdata unsigned char区别?

[复制链接]
7665|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有关系呢?不解。。

使用特权

评论回复
5
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

使用特权

评论回复
6
ayb_ice| | 2010-4-13 13:41 | 只看该作者

修改

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

1# 7120223
非指针情况下一样,指针情况不一样。建议使用第一种。

使用特权

评论回复
7
7120223|  楼主 | 2010-4-13 22:50 | 只看该作者
但是使用第一种,感觉有点我上面提到的问题啊芯片不正常。定义数组,应该和指针是属于同一类型的吧,我用的是W77E058.

使用特权

评论回复
8
7120223|  楼主 | 2010-4-13 22:55 | 只看该作者
按照5楼翻译的,好像我是吧数组位置定义在SRAM中了,数据指向了别的地方,但是我定义的是170*6=1020这么多数据他是存储在那里的,搞不懂?

使用特权

评论回复
9
john_light| | 2010-4-14 09:39 | 只看该作者
编译链接完成时提示有data/xdata/code字节占用信息。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

389

帖子

0

粉丝