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

[复制链接]
 楼主| 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 | 显示全部楼层
肯定是程序本身逻辑问题
 楼主| renjf 发表于 2011-9-9 15:40 | 显示全部楼层
函数没有办法跟踪,能否介绍一个检查逻辑错误的方法?
ayb_ice 发表于 2011-9-9 15:50 | 显示全部楼层
根据现象分析原理,
必要时分析反汇编代码
 楼主| renjf 发表于 2011-9-9 16:15 | 显示全部楼层
是要分析汇编代码?
:L
alicedodo 发表于 2011-9-9 16:16 | 显示全部楼层
3# renjf
如果连main()函数都进不了,那我怀疑LZ的编译模式设置或者STARTUP.A51配置有问题。

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

评分

参与人数 1威望 +1 收起 理由
ningling_21 + 1

查看全部评分

johnwjl 发表于 2011-9-9 19:26 | 显示全部楼层
定义一个全局变量:
extern unsigned int xdata current_value[4][10];
要加extern 吗?
刘前辈 发表于 2011-9-9 20:00 | 显示全部楼层
本帖最后由 刘前辈 于 2011-9-9 20:07 编辑

挺好的,没问题:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ahgao 发表于 2011-9-9 21:32 | 显示全部楼层
为毛用extern?按我的理解这样在link时应该提示找不到符号。
ayb_ice 发表于 2011-9-10 08:18 | 显示全部楼层
原来定义与声明都没有搞明白
 楼主| renjf 发表于 2011-9-10 10:03 | 显示全部楼层
兄弟说的不够准确
在MAIN.C 有定义过
unsigned int xdata current_value[4][10]={0};

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

以前用IAR,C8051也没有用过,才会出如此现象,还请各位多提建议,特别是用C8051F340的哥们,给小弟支支招,不甚感激
 楼主| renjf 发表于 2011-9-10 10:28 | 显示全部楼层
在其他文件里有定义
unsigned int xdata current_value[4][10]={0};
ningling_21 发表于 2011-9-10 10:45 | 显示全部楼层
9# johnwjl

这里是声明,不是定义的...
 楼主| renjf 发表于 2011-9-10 11:08 | 显示全部楼层
本帖最后由 renjf 于 2011-9-10 11:10 编辑

在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?
 楼主| renjf 发表于 2011-9-10 11:12 | 显示全部楼层
在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?
 楼主| renjf 发表于 2011-9-10 11:13 | 显示全部楼层
8# alicedodo


在定义成int 的时候。总是跑到startup.a51这个文件里,就跑不出来了
但不知道为何?
linbei1988 发表于 2011-9-10 15:45 | 显示全部楼层
怎么会连起始文件都受到影响,没碰到过
ahgao 发表于 2011-9-10 20:06 | 显示全部楼层
启动代码会对你定义的全局数组进行初始化。你仿真运行一下程序,看看是不是在初始化这个数组时出问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

1

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