打印

新手求助,关于变量分配的问题

[复制链接]
1565|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qvk789|  楼主 | 2011-10-7 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次做稍微大点的程序,知道变量按照data idata xdata原则分配,用了W78E058的单片机 keil 里的说明文件是这样的8051 based CMOS controller with 12T architecture speed up to 40MHz,36 I/O lines, 3 Timers/Counters, 8 Interrupts/2 priority levels,
Multiple-Time Programmable, Extra I/O Port, INT2, INT3
32k FLASH EPROM (Application),  512 Bytes on-chip RAM
4k FLASH EPROM (Loader)

这里说RAM:
找到变量定义说明是这样的:
data是在 0 到 127 之间的一个数据存储器地址,或者在 128 .. 255 范围内的一个特殊功能寄存器(SFR)地址。


idata是 0 to 255 范围内的一个 idata 存储器地址。


xdata 是 0 to 65535 范围内的一个 xdata 存储器地址。
问题1:
在实际运用中发现一个变量我定义为IDATA 程序运行时,如果给片子的中断很快,单片机会自动复位。
如果我定义为data则没有这个问题
问题2:
还有一个变量定义为XDATA 而这个变量保存的数据要显示在128*64LCD上时,会出现显示错误的情况。  
硬件电路是连接正确的,用了62256做外部RAM拓展
变量定义为XDATA 后,KEIL是不是会自动处理,需要在KEIL的选项设置么,具体我这个情况(W78E058的单片机和62256)该怎么设置?
问题3:
62256有一个铁电供电,我发现有几个特定的数据会存储错误,关掉电源,再开启的话会乱掉,不知道是什么原因


在论坛看到许多热心的人,所以一些不懂的问题想找到一些答案,或者说是思路
请大家帮助下,不胜感激!!!



相关帖子

沙发
ayb_ice| | 2011-10-8 08:31 | 只看该作者
还没有真正的入门

使用特权

评论回复
板凳
qvk789|  楼主 | 2011-10-8 08:43 | 只看该作者
是啊,能告诉我一下怎么回事么?真心求教

使用特权

评论回复
地板
qvk789|  楼主 | 2011-10-8 08:43 | 只看该作者
2# ayb_ice
是啊,能告诉我一下怎么回事么?真心求教

使用特权

评论回复
5
ayb_ice| | 2011-10-8 09:03 | 只看该作者
有些变量的操作不是一条指令可以完成的,如果中间被打断,可能存在错误,这需要程序员去处理
建议看看有关RTOS的书籍吧

使用特权

评论回复
6
qvk789|  楼主 | 2011-10-8 09:16 | 只看该作者
5# ayb_ice
RTOS实时系统有什么好的书籍推荐么?
程序很简单
uchar kk1,dat1;
uint    zhenju[4];                      //参数设置-4个针距数值
下面这一段是放在外部中断里的
if((huaxing_ReadByte(Add-zhenju[0]) & 0x40) == 0)   //检测到0,选针器向上,数据赋值0
      {
      dat2 &= (~kk2);
      }
      if((huaxing_ReadByte(Add-zhenju[0]) & 0x40)== 0x40 )  //检测到1,选针器向下,数据赋值1
      {
      dat2 |= kk2;
      }  
Add++;
if(Add>HUAXING_START+zhenju[0])
     kk2 = kk2<<1;
if(kk1 == 0){kk1 = 0x01;}
就是说unsigned int  idata  zhenju[4];这么定义 单片机就自动复位了
unsigned int zhenju【4】;这样定义就一点问题都没有
能看出什么么···郁闷了很久了

使用特权

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

本版积分规则

0

主题

6

帖子

1

粉丝