导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教,取ROM存RAM问题,困扰一周了。[boysen]

 *第9265篇: 请教,取ROM存RAM问题,困扰一周了。

  
楼 主:boysen 2003年3月24日13:56
 请教,取ROM存RAM问题,困扰一周了。
我的程序思路是根据汉字内码,从ROM中取出其点阵,然后立刻存入RAM中。我得程序主要部分如下:
       for (start=0;start  <32;start++)
              {  
                      StoreBuffer[i].TempArray[n][start]=XBYTE[TempAddr+start];                        
              }
其中StoreBuffer[i].TempArray[n][start]是存入RAM的结构数组变量;XBYTE[TempAddr+start]是从ROM中取字库点阵;
问题:这样做可以从ROM中取对1K左右数据(因为我用的P89C51RD2单片机,其内部集成了768字节XRAM)。
经在论坛上求助,有大侠建议改用指针,如下:
uchar xdata *pRam;
uchar code  *pRom;

  pRam=StoreBuffer[i].TempArray[n];  //
   pRom=&((uchar code *)TempAddr);  //TempAddr为ROM字库地址(0—1024)
                for (start=0;start  <32;start++)
                    {  
                          *pRam++=*pRom++;                       
                    }
结果这样做,根本就取不到数据。请教高手,紧急等待中。。。。。。

  
2楼:xiao_mao 2003年3月24日14:10
 这样试试!!
for (start=0;start  <32;start++)
   {  
   StoreBuffer[i].TempArray[n][start]
         =CBYTE[(int)TempAddr+(int)start];                        
    }
注意:XBYTE是取XDATA的内容,
而CBYTE才是取CODE 的内容。
  
3楼:boysen 2003年3月24日14:20
 这样好像不行
  
4楼:xiao_mao 2003年3月24日14:22
 咦??可我试得很OK的。
你把这段烤去编译。我通过的。
#include   <absacc.h>  

char xx;
char code TempAddr[]={0x30,0x31,0x32,0x33};
void main()
{
  char start;
  for (start=0;start  <32;start++)
     {  
         xx=CBYTE[(int)TempAddr+(int)start];
     }
   
}

你会看到xx会从0x30~0x33.

  
5楼:boysen 2003年3月24日14:41
 谢谢老兄,这样可以,不过我也是只能是取正确1K左右数据。我再检查一下电路看看那
  
6楼:dabing 2003年3月24日16:43
 另外一楼的原程中
pRom=&((uc

另外一楼的原程中
pRom=&((uchar code *)TempAddr);
TempAddr 没说清楚
如果是数组首地址或指针那应该这样
pRom=(uchar code *)TempAddr;
  
7楼:boysen 2003年3月24日17:22
 这个值是某汉字点阵的首地址
  
8楼:dabing 2003年3月25日12:36
 那一定要这么写了
本来就是指针,只要作

那一定要这么写了
本来就是指针,只要作一下赋值前的强制类型转换code 型 char指针,其实可以不作的
就ok啦
原程中最后又把转换后的指针取&
结果只能得到指针指向的code单元的数据,又赋值给了一个指针 prom
这样在用 *prom 时就不知道读到哪里去了
  
9楼:boysen 2003年3月25日13:01
 谢谢各位老大,我已经搞定了。是我程序设置的初始值在作怪!
  
10楼:dabing 2003年3月25日13:07
 用什么编译器?什么初值呢?
说来听听,

用什么编译器?什么初值呢?
说来听听,大伙也研究研究

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

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


[上一篇主题]:protel  方面

[下一篇主题]:怎样使用ADSIM812进行UART串口仿真