Board logo

标题: [求助]修改RAM映射地址后不能查看其中的值 [打印本页]

作者: bingo571    时间: 2007-4-20 22:57

[upload=image/bmp]uploadImages/{0CCD680D-61D8-420A-85F6-F1AB134DACAE}.bmp[/upload]
在Memory窗口中可以看到erase这个变量存在2000到2001,但是为什么没有值,是一个横线呢?
谢谢~~
作者: bingo571    时间: 2007-4-21 11:23     标题: [求助]修改RAM映射地址后不能查看其中的值

s12dg128b,通过修改PRM文件,将 RAM = READ_WRITE 0x2000 TO 0x3FFF;并且也在main函数中设定INITRM=0x21,为什么在memory窗口0x2000处却看不到值呢?

[此贴子已经被作者于2007-4-21 11:23:02编辑过]


作者: strongchen    时间: 2007-4-23 10:45

做一个简单的project贴出来看看。
作者: bingo571    时间: 2007-4-24 10:07

http://bbs.chinaecnet.com/uploadImages/test423.rar
现在我想从Memory窗口查看temp这个变量,可是看不到,
是个横线。。
作者: strongchen    时间: 2007-4-24 10:32

你的project中并没有erase这个变量,只有temp,由于它是局部变量,所以它的地址位于堆栈中,为0x20FC,如附图所示:

作者: strongchen    时间: 2007-4-24 10:33

[upload=image/pjpeg]uploadImages/RAM Address.jpg[/upload]
作者: bingo571    时间: 2007-4-25 14:15

在仿真中是可以看到,可是下到硬件里就看不到了,而且不能停在断点处,程序停在
#ifdef __OPTIMIZE_FOR_SIZE__ /* -os, default */
NextWord: CLR 1,Y+ ; clear memory byte
这里了.
我用的3.1写的程序,4.1的hiwave下的程序.
作者: strongchen    时间: 2007-4-25 16:41

我没有像你这样使用过,所以不清楚你的问题到底是什么,但有可能是因为:由于修改了PRM文件,编译后生成的堆栈是指向新的RAM区的,但是你是在主函数中才初时化INITRM寄存器的,所以在执行startup程序时,RAM还没有映射到新的区域,这时就出现了矛盾,如果有堆栈的操作,比如调用子程序或其他运算,就会使程序跑飞。解决的方法是在startup中对INITRM赋值。你可以看到在start12.c中有这么一段:

#if defined(_HCS12_SERIALMON)
/* for Monitor based software remap the RAM & EEPROM to adhere
to EB386. Edit RAM and EEPROM sections in PRM file to match these. */
___INITRG = 0x00; /* lock registers block to 0x0000 */
___INITRM = 0x39; /* lock Ram to end at 0x3FFF */
___INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */
#endif

所以只要在start12.c文件的头上加一句:

#define _HCS12_SERIALMON

然后就可以在这里修改INITRM的值了。

你也可以参考这个帖子:

http://bbs.eccn.com/dispbbs.asp?boardid=3&rootid=115803&id=115803&star=

[此贴子已经被strongchen于2007-4-25 16:41:10编辑过]


作者: bingo571    时间: 2007-4-25 23:02

嗯,我试试吧




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