A bootloader használatához szükségesek a megfelelően előkészített startup kódok, attól függően melyiket kívánjuk használni. Ezek a kódok a crt0.c, crt0i.c és a crt0iz.c fájlokban vannak. Illetve szükséges még a megfelelően megszerkesztett Linker Script és a megfelelő compiler és linker opciók beállítása is.
Példaként nézzük a crt0i.c tartalmának egy döntő részletét, ami alapesetben a reset vektort a 0x0000 címre helyezi:
/* * entry function, placed at interrupt vector 0 (RESET) */ void _entry (void) __naked __interrupt 0 { __asm goto __startup __endasm; }
/* * entry function, placed at interrupt vector 0 (RESET) */ #pragma code _entry 0x1000 void _entry (void) __naked __interrupt 0 { __asm goto __startup __endasm; }
Ezek után a megfelelő Linker script:
// File: 18f4550.lkr // Sample linker script for the PIC18F4550 processor // Not intended for use with MPLAB C18. For C18 projects, // use the linker scripts provided with that product. LIBPATH . //FILES ../bootloaders/bl_crt0.o // use --ivt-loc and --no-crt options ! CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED CODEPAGE NAME=vectors START=0x1000 END=0x1029 PROTECTED CODEPAGE NAME=page START=0x102A END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
-Wl-s"valamilyen.lkr"
Project => Project Properties => Options for Compiler:
--ivt-loc=0x1000
--use-crt="../bootloaders/bl_crt0xx.o"