打印

XDATA 不能定义INT 的二维数组?

[复制链接]
6738|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renjf|  楼主 | 2011-9-9 15:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 renjf 于 2011-9-10 10:25 编辑

兄弟在KEIL环境下遇到一个奇怪的问题

定义一个全局变量:
extern unsigned int xdata current_value[4][10];
编译没有错,但程序不能运行

定义成:
extern unsigned char xdata current_value[4][10];
就可以运行

兄弟不知道为什么XDATA区不支持整形的二维数组,如果定义一个
extern unsigned int xdata bb;
这样的整型变量也不会出现问题。

兄弟用的单片机是C8051F340,片上带有4K XRAM

相关帖子

沙发
alicedodo| | 2011-9-9 15:09 | 只看该作者
LZ疑问基本上没必要
不要随便怀疑编译器有问题,多从自己的程序上找找原因。

可能是定义的数组太大,建议LZ单步调试 跟踪一下

使用特权

评论回复
板凳
renjf|  楼主 | 2011-9-9 15:21 | 只看该作者
没有办法跟踪,在用INT型二维数组的时候,根本就找不到主函数,兄弟在MAIN的第一行,关看门狗的地方设置断点都没有办法跑到!

另外编译过以后,XDATA才82个字节,而片上的XDATA有4K的大小?有点想不通。
以前少用KEIL,有点困惑!

使用特权

评论回复
地板
ayb_ice| | 2011-9-9 15:29 | 只看该作者
肯定是程序本身逻辑问题

使用特权

评论回复
5
renjf|  楼主 | 2011-9-9 15:40 | 只看该作者
函数没有办法跟踪,能否介绍一个检查逻辑错误的方法?

使用特权

评论回复
6
ayb_ice| | 2011-9-9 15:50 | 只看该作者
根据现象分析原理,
必要时分析反汇编代码

使用特权

评论回复
7
renjf|  楼主 | 2011-9-9 16:15 | 只看该作者
是要分析汇编代码?
:L

使用特权

评论回复
8
alicedodo| | 2011-9-9 16:16 | 只看该作者
3# renjf
如果连main()函数都进不了,那我怀疑LZ的编译模式设置或者STARTUP.A51配置有问题。

从地址0000H开始调试吧,option --> debug --> run to main() 取消该选项。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
ningling_21 + 1
9
johnwjl| | 2011-9-9 19:26 | 只看该作者
定义一个全局变量:
extern unsigned int xdata current_value[4][10];
要加extern 吗?

使用特权

评论回复
10
刘前辈| | 2011-9-9 20:00 | 只看该作者
本帖最后由 刘前辈 于 2011-9-9 20:07 编辑

挺好的,没问题:




使用特权

评论回复
11
ahgao| | 2011-9-9 21:32 | 只看该作者
为毛用extern?按我的理解这样在link时应该提示找不到符号。

使用特权

评论回复
12
ayb_ice| | 2011-9-10 08:18 | 只看该作者
原来定义与声明都没有搞明白

使用特权

评论回复
13
renjf|  楼主 | 2011-9-10 10:03 | 只看该作者
兄弟说的不够准确
在MAIN.C 有定义过
unsigned int xdata current_value[4][10]={0};

在另外一个文件INTERRUPT。H里才声明的

以前用IAR,C8051也没有用过,才会出如此现象,还请各位多提建议,特别是用C8051F340的哥们,给小弟支支招,不甚感激

使用特权

评论回复
14
renjf|  楼主 | 2011-9-10 10:28 | 只看该作者
在其他文件里有定义
unsigned int xdata current_value[4][10]={0};

使用特权

评论回复
15
ningling_21| | 2011-9-10 10:45 | 只看该作者
9# johnwjl

这里是声明,不是定义的...

使用特权

评论回复
16
renjf|  楼主 | 2011-9-10 11:08 | 只看该作者
本帖最后由 renjf 于 2011-9-10 11:10 编辑

在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?

使用特权

评论回复
17
renjf|  楼主 | 2011-9-10 11:12 | 只看该作者
在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?

使用特权

评论回复
18
renjf|  楼主 | 2011-9-10 11:13 | 只看该作者
8# alicedodo


在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?

使用特权

评论回复
19
linbei1988| | 2011-9-10 15:45 | 只看该作者
怎么会连起始文件都受到影响,没碰到过

使用特权

评论回复
20
ahgao| | 2011-9-10 20:06 | 只看该作者
启动代码会对你定义的全局数组进行初始化。你仿真运行一下程序,看看是不是在初始化这个数组时出问题。

使用特权

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

本版积分规则

0

主题

11

帖子

1

粉丝