Vai al contenuto
PLC Forum


Aiuto: Rilocare Il Reset Vector Con Bootloader - Aho. Ce risiamo ;-)


Il Novizio

Messaggi consigliati

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 compiler

1 - the standard start-up object (c018.o or c018i.o) must be rebuilt with the new reset vector

2 - 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 :D .

Io ho operato così, ditemi se ho fatto qualche caxxxata, come è molto probabile vista la mia scarsa preparazione :rolleyes: .

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 PROTECTED

ho messo boot all'inizio per i primi 512 bytes

e 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_scn

void

_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


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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...