Board logo

标题: [求助]关于PRM文件的问题 [打印本页]

作者: Michael001    时间: 2005-9-29 10:11     标题: [求助]关于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窗口中的相应位置并没有发现这些数据,这是怎么回事?
作者: strongchen    时间: 2005-9-29 14:11

如果常数只定义却不在程序中引用,就会被优化掉。
作者: Michael001    时间: 2005-9-29 17:09

但是,我在程序中用到了。
    AND     #$0f
    CLRH
    TAX
    LDA     NumTable,X
作者: 8808beter    时间: 2005-9-29 17:46

先试试定义一个变量,如果可以找到地址的话,,,
作者: Michael001    时间: 2005-9-30 08:56

我已经定义过变量了,但是不行啊!
作者: 8808beter    时间: 2005-9-30 09:15

你是说定义一个变量也在地址中找不到吗?!
可能你应该把那一串常量定义在ROM中才对吧,你实际定义在RAM中。
要是想定义在RAM中呀,要另在程序中在赋值一次,那就是变量了,只不过你赋值后再不更改而已。
作者: strongchen    时间: 2005-9-30 10:16

如果愿意,把你的整个project打包发过来看看。
作者: Michael001    时间: 2005-10-8 14:52

如何上传文件?
作者: strongchen    时间: 2005-10-8 14:57

strongchen_free@yahoo.com.cn
作者: Michael001    时间: 2005-10-8 15:07

版主,我已经发过来了。
作者: strongchen    时间: 2005-10-8 15:13

我刚看了一下,好像没有附件?
作者: Michael001    时间: 2005-10-8 15:56

我重新发了一下
作者: Michael001    时间: 2005-10-9 16:40

在硬件仿真时,是不是应该把NUMTABLE放入ROM中,而不是RAM中呢?
作者: strongchen    时间: 2005-10-10 10:17

如果是常数,就放入ROM中;如果是变量,就放入RAM中。
作者: strongchen    时间: 2005-10-10 10:19

我看到了你的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编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0