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

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

做一个简单的project贴出来看看。
海纳百川  有容乃大
你的project中并没有erase这个变量,只有temp,由于它是局部变量,所以它的地址位于堆栈中,为0x20FC,如附图所示:
海纳百川  有容乃大
[upload=image/pjpeg]uploadImages/RAM Address.jpg[/upload]
海纳百川  有容乃大
我没有像你这样使用过,所以不清楚你的问题到底是什么,但有可能是因为:由于修改了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编辑过]

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