From: <fj...@ya...> - 2004-03-25 22:02:49
|
--- Jean-Christophe Bequart <kv...@gm...> escribió: > Hello everyone, > > I'm designing software for a 8051 system with an > external Flash, and > would like to implement my firmware in two parts: > > 1) a boot (loader) at address 0x0000, > 2) the actual application at an upper address (say > for example 0x1000). > > The whole thing should work following way: > -> normal use: the boot loader executes and then > jumps to 0x1000, > -> firmware update request: the boot loader executes > following steps: > 1) copy the boot loader from flash to xdata RAM, > 2) switch the memory spaces code <-> xdata and then > run from RAM > 3) start the firmware update procedure. > > The hardware has a flash from 0x0000 to 0xFFFF in > code space, and RAM > from 0x0000 to 0x7FFF in xdata space. As described > above, it is possible > to switch the xdata and code memory spaces. > > So now the actual problem (s): > > - 1st problem: the 8051 has all its interrupt > vectors at 0x03, 0x0B, > etc... In the SDCC docs it is stated that when > compiling with the option > --code-loc, the interrupt vector table is is > relocated to that address. > But I guess that in this case, the boot loader has > to include a jump > (probably a ljmp 0x100x in my example) and that in > this case I have to > put this as a small assembler stub like that in the > boot loader: > > void serial_isr (void) interrupt 4 > { > _asm > ljmp 0x1000 (or should it be lcall 0x1000 / reti?) > _endasm; > } > > Now the point: What is if the application and the > boot loader use their > own ISRs? I'm working in a similar project and I use the F0 flag (in PSW register) to execute the bootloader ISR or the application ISR. I use the Keil compiler. For example, in a .asm file I put the following code: CSEG AT 02BH T2_VECTOR: JB F0, BOOT_T2 LJMP APP_VECTOR + 02BH BOOT_T2: AJMP T2_ISR The T2_ISR is the bootloader ISR. APP_VECTOR is the direction where the application start At the beginning of the bootloader, the F0 bit must be set to 1 and before execute the application, the F0 bit must be set to 0. > I mean, in both cases I use the serial > port for example... > The alternative would probably be making the > application use the boot > loader ISRs... but in this case the app. and the > boot loader must agree > on common functions / variables and have to both to > know their > respective addresses. I mean, I could do this > special thing in assembler > but it would be nice to do it in C... Is there a > possibility to assign > particular functions a specific address in code? > > - 2nd problem (it is really one?) I have to complile > the boot loader > using the option --model-small (no xram available!) > and I plan to > compile the application with the option > --model-large. Should I expect > some problems? And then, it is sufficient to put a > ljmp (or a lcall) at > the end of the boot loader so that the main () of > the application will > be executed? > > I'm using SDCC v 2.3.5, 10/18/2003 on a SusE 8.0 > linux machine, mainly > for various hobby projects. Normally I use a 8051 > with an on-chip flash > and in this case, I don't have this particular boot > loader problem... > But here the hardware is already there (in fact, it > was formerly all > written in assembler, and is currently being > redesigned). > > Many thanks for reading this long email and for your > help, > > > Jean-Christophe. > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: IBM Linux > Tutorials > Free Linux tutorial presented by Daniel Robbins, > President and CEO of > GenToo technologies. Learn everything from > fundamentals to system > administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-useruser > mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user ___________________________________________________ Yahoo! Messenger - Nueva versión GRATIS Super Webcam, voz, caritas animadas, y más... http://messenger.yahoo.es |