From: Johan K. <joh...@id...> - 2001-12-16 12:56:27
|
Basically what I did: - Removed the "TRY_THE_NEW_INITIALIZER" approach. - Added a new area "XISEG (REL,CON,XDATA)" where initialized data will be allocated - Added a new area "XINIT (REL,CON,CODE)" where a copy of the initialized data will be stored Ofcourse these areas are added to the port structure together with a "void (*genXINIT) (FILE *)". If that one is !NULL the above segments will be used and once at startup genXINIT() will copy XINIT to XISEG for all initialized data. I added this for the mcs51 port (others are set to NULL) and used Paul's optimized memcpy (with a small modification because the assembler can't do " cjne a,#(s_XINIT+l_XINIT),00001$"). I can think of some command line switches to either prevent all that or emit XINIT in a seperate file instead of in the code segment. The framework is there. All that is needed for other ports: - Write a smallest most efficient genXINIT() in e.g. port/main.c (look at mcs51/main.c for an example) - Think of a reasonable name for XISEG and XINIT - Insert these three in the port structure and you should be all set Please note that the static segment should be CSEG now, not GSINIT (which was always ignored) or probably nothing will work anymore. Please comment. Johan |