这个程序公共变量是无效的
#include "stdio.h"
#include "math.h"
#include "ADuc834.h"
#define XBYTE ((unsigned char volatile xdata*) 0)
//use internal RAM
double xdata A0=7.6965150;
double xdata A1=2.1224540;
double xdata A2=0.0007543914;
long int xdata point=0x98655;
//long int xdata
sbit flag=0xb5;
void usenum();
void main()
{
int xdata i=0;
int j;
CFG834=1;
point =point +1;
while(1)
{
XBYTE[0x7ff]=0xfe;
j=XBYTE[0x7ff];
if(j==0xfe)
{
flag=1;
}
else
{ flag=0;}
}
}
wing
有很多种 MCU 的在片的 XRAM 需要打开一个开关才能使用。
如果在打开这个开关前引用 XRAM, 则存取数据都是对外存的操作。
下面看你的程序。
#include "stdio.h"
#include "math.h"
#include "ADuc834.h"
#define XBYTE ((unsigned char volatile xdata*) 0)
//use internal RAM
double xdata A0=7.6965150; // 这些赋值,是在运行到 main 函数之前做的。
double xdata A1=2.1224540; // 看你的程序,是在 main 函数里进行打开
double xdata A2=0.0007543914; // XRAM 开关的动作,这样这些赋值就送错了地方
long int xdata point=0x98655; //
//long int xdata
sbit flag=0xb5; //
void usenum();
void main()
{
int xdata i=0;
int j;
CFG834=1; // 这是打开开关的指令吗?
// 那些赋值都是在此之前执行的。
point =point +1; // 此后对 XRAM 的操作应该是对在
// 片 XRAM 的操作
while(1)
{
XBYTE[0x7ff]=0xfe;
j=XBYTE[0x7ff];
if(j==0xfe)
{
flag=1;
}
else
{ flag=0;}
}
}
程序不妨改成这样:
include "stdio.h"
#include "math.h"
#include "ADuc834.h"
#define XBYTE ((unsigned char volatile xdata*) 0)
//use internal RAM
double xdata A0;
double xdata A1;
double xdata A2;
long int xdata point;
//long int xdata
sbit flag=0xb5;
void assigns(void)
{
A0=7.6965150;
A1=2.1224540;
A2=0.0007543914;
point=0x98655;
}
void usenum();
void main()
{
int xdata i=0;
int j;
CFG834=1;
assigns();
point =point +1;
while(1)
{
XBYTE[0x7ff]=0xfe;
j=XBYTE[0x7ff];
if(j==0xfe)
{
flag=1;
}
else
{ flag=0;}
}
}