首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]关于PRM文件的问题

[求助]关于PRM文件的问题

NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */

SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
      ROM                    =  READ_ONLY    0xDE00 TO 0xFDFF;
      Z_RAM                  =  READ_WRITE   0x0080 TO 0x00FF;
      RAM                    =  READ_WRITE   0x0100 TO 0x017F;
END

PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
      DEFAULT_RAM                       INTO  RAM;
      _DATA_ZEROPAGE, MY_ZEROPAGE       INTO  Z_RAM;
      DEFAULT_ROM, ROM_VAR, STRINGS     INTO  ROM;
      MYRAM                             INTO  RAM;

END

STACKSIZE 0x30

//VECTOR 0 _Startup /* Reset vector: this is the default entry point for a C/C++ application. */
VECTOR 0 Entry  /* Reset vector: this is the default entry point for an Assembly application. */
INIT Entry      /* For assembly applications: that this is as well the initialization entry point */
这个是我的PRM文件,现在我在MYRAM中定义了一个常量如下:
MYRAM: SECTION
NumTable            FCB      $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$00
但是在我的调试界面中的memory窗口中的相应位置并没有发现这些数据,这是怎么回事?
如果常数只定义却不在程序中引用,就会被优化掉。
海纳百川  有容乃大
但是,我在程序中用到了。
    AND     #$0f
    CLRH
    TAX
    LDA     NumTable,X
先试试定义一个变量,如果可以找到地址的话,,,
学后而问
我已经定义过变量了,但是不行啊!
你是说定义一个变量也在地址中找不到吗?!
可能你应该把那一串常量定义在ROM中才对吧,你实际定义在RAM中。
要是想定义在RAM中呀,要另在程序中在赋值一次,那就是变量了,只不过你赋值后再不更改而已。
学后而问
如果愿意,把你的整个project打包发过来看看。
海纳百川  有容乃大
如何上传文件?
strongchen_free@yahoo.com.cn
海纳百川  有容乃大
版主,我已经发过来了。
我刚看了一下,好像没有附件?
海纳百川  有容乃大
我重新发了一下
在硬件仿真时,是不是应该把NUMTABLE放入ROM中,而不是RAM中呢?
如果是常数,就放入ROM中;如果是变量,就放入RAM中。
海纳百川  有容乃大
我看到了你的project,知道了你的问题是什么。
首先,FCB是定义常量的伪指令,不能用于定义或初始化变量。因为变量放在RAM中,上电后的值是不确定的。放在RAM中的变量必须用数值指令(STA、STX、MOV等)进行赋值。
所以,你在程序中将NUMTABLE定义在RAM的ZERO_PAGE中,然后用FCB伪指令去赋值,编译器是不认的。
但是,你用ORG然后再用FCB这种方式,可以说是骗过了编译器。此时编译器不知道你的0x50的地址到底是RAM还是ROM,因为你用了FCB指令,就当作常数赋值了。
但实际上,这种作法虽然能骗过编译器,也只能在软件仿真时有用。当硬件仿真或把程序写入芯片时就会出错。因为RAM本身在写芯片时是不写的,而且其中的值复位后是不确定的。


[此贴子已经被strongchen于2005-10-10 10:19:04编辑过]

海纳百川  有容乃大
返回列表