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

[求助]修改RAM映射地址后不能查看其中的值

[upload=image/bmp]uploadImages/{0CCD680D-61D8-420A-85F6-F1AB134DACAE}.bmp[/upload]
在Memory窗口中可以看到erase这个变量存在2000到2001,但是为什么没有值,是一个横线呢?
谢谢~~

[求助]修改RAM映射地址后不能查看其中的值

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

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

做一个简单的project贴出来看看。
海纳百川  有容乃大
http://bbs.chinaecnet.com/uploadImages/test423.rar
现在我想从Memory窗口查看temp这个变量,可是看不到,
是个横线。。
你的project中并没有erase这个变量,只有temp,由于它是局部变量,所以它的地址位于堆栈中,为0x20FC,如附图所示:
海纳百川  有容乃大
[upload=image/pjpeg]uploadImages/RAM Address.jpg[/upload]
海纳百川  有容乃大
在仿真中是可以看到,可是下到硬件里就看不到了,而且不能停在断点处,程序停在
#ifdef __OPTIMIZE_FOR_SIZE__ /* -os, default */
NextWord: CLR 1,Y+ ; clear memory byte
这里了.
我用的3.1写的程序,4.1的hiwave下的程序.
我没有像你这样使用过,所以不清楚你的问题到底是什么,但有可能是因为:由于修改了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编辑过]

海纳百川  有容乃大
嗯,我试试吧
返回列表