??? 11/21/06 21:49 Read: times |
#128386 - Know no nice solution Responding to: ???'s previous message |
Jan,
I understand what you're asking but know no proper and nice solution. It's kind of what another of our developers created for the stack in idata memory space when he introduced the option --pack-iram (default by now). You want the largest available chunk of unused space and as long as only one object is asking for it it should be possible. You have one piece of luck: if you do not place segments in xdata yourself the linker will just start filling from the bottom up. I do not know from the top of my head which segment is placed last but it's always the same one. If Frieder says XISEG, that's probably the one. The symbols created for the segments are used during startup for clearing and initializing (e.g. see crtxinit.asm). Unfortunately there is no symbol created by the linker for the end of xdata. Frieders snippet is a good way to get the value IMHO. Maybe you can even optimize it by letting the assembler/linker do the addition. OTOH the optimization might also fail with cryptic error messages. as8051 is not the best assembler but it's what we use. Try it and you'll know. I recommend to make the return type void xdata * , assign it to a properly typed pointer and use it as such. Maarten |