Il Novizio Inserito: 27 ottobre 2004 Segnala Share Inserito: 27 ottobre 2004 Ciao a tutti,Ecco l'ennesima richiesta di aiuto da un newbie dei PIC come me.Sto usando un bootloader (per la precisione quello fornito dalla microchip stessa per pic della famiglia 18) che occupa i primi 512 bytes della flash memory.Ok, nella 'application note' di questo bootloader, si specifica, e cito:"When using the MPLAB C18 C compiler1 - the standard start-up object (c018.o or c018i.o) must be rebuilt with the new reset vector2 - the linker file must incorporate the protected boot block and new vectors."Nonostante si faccia riferimento al C18, penso che anche users di altri compiler o anche programmatori in assembler possano aiutarmi; quindi accorrete numerosi please .Io ho operato così, ditemi se ho fatto qualche caxxxata, come è molto probabile vista la mia scarsa preparazione .per il punto 2 - il linker l'ho riscritto così:CODEPAGE NAME=boot START=0x0 END=0x1FF PROTECTED <--------CODEPAGE NAME=vectors START=0x200 END=0x229 PROTECTEDho messo boot all'inizio per i primi 512 bytese ho spostato vectors a partire dall'indirizzo 0x200.per il punto 1 - new reset vector nello start-up object/* MPLAB-C18 startup code *///////////////////////attention////////////////////////////////////////////// <---- queste avvertenze l'ho scritte io///////////this start-up code has been changed due to the boot loader//////////////////////////reset vector is at location 0x200///////////////////////////* external reference to the user's main routine */extern void main (void);/* prototype for the startup function */void _entry (void);void _startup (void);extern near char FPFLAGS;#define RND 6#pragma code _entry_scn=0x000200 //<------ecco qua la rilocazione. Ho fatto giusto????void_entry (void){_asm goto _startup _endasm}#pragma code _startup_scnvoid_startup (void){ _asm // Initialize the stack pointer lfsr 1, _stack lfsr 2, _stack clrf TBLPTRU, 0 // 1st silicon doesn't do this on POR bcf FPFLAGS,RND,0 // Initalize rounding flag for floating point libs_endasm loop: // Call the user's main routine main (); goto loop;} /* end _startup() */---------------------------------------------------------Vi ringrazio ancora per l'ennesimo aiuto e vi saluto Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora