导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→各位大虾,高手看过来,关于使用on-chip XRAM[fantianchen]

 *第16996篇: 各位大虾,高手看过来,关于使用on-chip XRAM

  
楼 主:fantianchen 2003年10月24日20:41
 各位大虾,高手看过来,关于使用on-chip XRAM
各位大哥
  最近在编写程序的时候,有一个问题就是on-chip XRAM 我想用这个作为外部存储器,就是一上电,程序就编译这个外部RAM有效,开始用赋值的方法没有问题,但是如果你要设置大量的变量,C语言就不允许了,有没有好办法

这个程序公共变量是无效的
                   
#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

  
2楼:johnxliu 2003年10月26日20:51
 你的用法有错误
看样子你在用 ADuC834片子。

有很多种 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;}

   }

}


>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:[原创]什么方法可以让单片机存储几M的数据

[下一篇主题]:请问编程的问题