我没有像你这样使用过,所以不清楚你的问题到底是什么,但有可能是因为:由于修改了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编辑过] |