Board logo

标题: 关于存储空间分配问题 [打印本页]

作者: kingcathy    时间: 2008-6-10 09:59     标题: 关于存储空间分配问题

我使用的MCU为:MC9S12DG128B,我写的代码如下,程序一调用地址分配函数就会跑飞,请问是什么原因

#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
/***********************上电后存储控制重新映射*******************/
//0x0000-0x03ff:1K寄存器空间//0x2000-0x3fff:8KRAM空间//0x0800-0x0fff:2KEEPROM空间;
void Address_Init()
{
INITRM=0x20; //RM13=1;
INITEE=0x09; //EEON=1,EE12=1
INITRG=0x00;
}

void main(void) {
/* put your own code here */
EnableInterrupts;
Address_Init();
for(;;) {} /* wait forever */
/* please make sure that you never leave this function */
}


作者: kingcathy    时间: 2008-6-10 11:40

在full chip simulation下程序没出现跑飞,但在TBDML下就会跑飞
作者: strongchen    时间: 2008-6-11 15:46

PRM文件是否做了相应的修改?
作者: kingcathy    时间: 2008-6-12 10:46

请问PRM文件需要做什么修改?

/* This is a linker parameter file for the MC9S12DG128 */
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. */
RAM = READ_WRITE 0x0400 TO 0x1FFF;
/* unbanked FLASH ROM */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;
/* banked FLASH ROM */
PAGE_38 = READ_ONLY 0x388000 TO 0x38BFFF;
PAGE_39 = READ_ONLY 0x398000 TO 0x39BFFF;
PAGE_3A = READ_ONLY 0x3A8000 TO 0x3ABFFF;
PAGE_3B = READ_ONLY 0x3B8000 TO 0x3BBFFF;
PAGE_3C = READ_ONLY 0x3C8000 TO 0x3CBFFF;
PAGE_3D = READ_ONLY 0x3D8000 TO 0x3DBFFF;
/* PAGE_3E = READ_ONLY 0x3E8000 TO 0x3EBFFF; not used: equivalent to ROM_4000 */
/* PAGE_3F = READ_ONLY 0x3F8000 TO 0x3FBFFF; not used: equivalent to ROM_C000 */
END

PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* OSEK */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_4000*/;
DEFAULT_ROM INTO PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;

//.stackstart, /* eventually used for OSEK kernel awareness: Main-Stack Start */
SSTACK, /* allocate stack first to avoid overwriting variables on overflow */
//.stackend, /* eventually used for OSEK kernel awareness: Main-Stack End */
DEFAULT_RAM INTO RAM;
//.vectors INTO OSVECTORS; /* OSEK */
END

ENTRIES /* keep the following unreferenced variables */
/* OSEK: always allocate the vector table and all dependent objects */
//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStart
END

STACKSIZE 0x100

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 */


作者: strongchen    时间: 2008-6-12 10:52

如果你改变了RAM和EEPROM的地址,那么在PRM文件中也要进行相应的修改。
作者: kingcathy    时间: 2008-6-12 22:26

谢谢版大的指导,问题解决了






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