邯郸书法家郑彬:我在使用DG128时候 代码溢出问题
来源:百度文库 编辑:九乡新闻网 时间:2024/05/06 10:25:39
版主好!大家好!我在使用DG128时候,链接出现L1102:out of allocation space in segment ROM_C000 at address 0xFEFF 的错误,我程序到了48K以上时出现的,我试着加#pragma CODE_SEG OTHER_ROM ,但无效,可能位置加错了。请问如何解决呢? 要和PRM文件配合。你在PRM文件里面设置OTHER_ROM的地址了吗? 是这段吗?谢谢!
SEGMENTS
RAM = READ_WRITE 0x2000 TO 0x3FFF;
/* 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
你在建project时选择的是什么memory模式?是small模式吗?如果是,那在PRM文件中已经定义了OTHER_ROM的地址,如下:
/* This is a linker parameter file for the MC9S12DB128 */
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 */
DEFAULT_ROM, 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*/;
OTHER_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 */ 我用的是bank模式呀,#pragma CODE_SEG OTHER_ROM 应该加在哪呢?谢谢! 如果你用的是BANKED模式,那DEFAULT的地址应该是在分页地址中,不应该出现溢出的情形。把你的project发给我看看吧: 我改了一下:
OTHER_ROM INTO PAGE_38,PAGE_39,PAGE_3A;
OTH2_ROM INTO PAGE_3B,PAGE_3C,PAGE_3D;
然后把一些字模、表格前加了 #pragma CONST_SEG OTH2_ROM,现在又通过了,不知以后还会不会有问题。谢谢! 链接通过了,但运行总不对 又改了一下:
DEFAULT_ROM INTO PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
OTH1_ROM INTO ROM_4000;
然后把一些字模、表格前加了 #pragma CONST_SEG OTH1_ROM,现在运行是正确的
SEGMENTS
RAM = READ_WRITE 0x2000 TO 0x3FFF;
/* 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
你在建project时选择的是什么memory模式?是small模式吗?如果是,那在PRM文件中已经定义了OTHER_ROM的地址,如下:
/* This is a linker parameter file for the MC9S12DB128 */
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 */
DEFAULT_ROM, 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*/;
OTHER_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 */ 我用的是bank模式呀,#pragma CODE_SEG OTHER_ROM 应该加在哪呢?谢谢! 如果你用的是BANKED模式,那DEFAULT的地址应该是在分页地址中,不应该出现溢出的情形。把你的project发给我看看吧: 我改了一下:
OTHER_ROM INTO PAGE_38,PAGE_39,PAGE_3A;
OTH2_ROM INTO PAGE_3B,PAGE_3C,PAGE_3D;
然后把一些字模、表格前加了 #pragma CONST_SEG OTH2_ROM,现在又通过了,不知以后还会不会有问题。谢谢! 链接通过了,但运行总不对 又改了一下:
DEFAULT_ROM INTO PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
OTH1_ROM INTO ROM_4000;
然后把一些字模、表格前加了 #pragma CONST_SEG OTH1_ROM,现在运行是正确的
我在使用DG128时候 代码溢出问题
R600a制冷剂在使用的时候应该注意那些问题,它实用与怎么样的制冷系统? - 已解决 - ...
如何在QQ空间使用代码
使用转经轮的时候不得不注意的问题
在我累的时候抱我
我在北京大学当学生的时候
我难过的时候你在哪里。。。
在我最失意的时候
“在我最动情的时候”
我难过的时候你在哪里?
我喜欢你,在很小的时候
钱学森:我在美国的时候
我难过的时候你在哪里
如何在QQ空间使用音画代码1
如何在QQ空间使用代码发表日志 -
如何在QQ空间使用代码发表日志
如何在QQ空间使用代码做精美音画边框
蓝屏的时候代码
HTML代码基础教程之一:如何在QQ空间使用HTML代码
不要在我寂寞的时候说爱我
别在我伤心的时候安慰我
blog使用问题问答--我的ET博客
怎么使用代码?
变频器在使用中遇到的问题和故障防范