Buongiorno e grazie all'admin per l'amissione al forum.
E' il mio primo post, che poi è una richiesta di aiuto: so che non è il massimo dell'eleganza, ringrazio pertanto in anticipo chiunque offrirà il proprio contributo.
Premetto: programmare PIC non è il mio lavoro ma un vecchio hobby che ho rispolverato per una piccola necessità; utilizzo ancora MpLab 8 con C18 in due versioni, la v3.06 full e la v3.47 lite.
Mi trovo a dover ricompilare il bootloader USB HID di Microchip per il 18F4550, i cui sorgenti ho trovato nella MLA_v2018_11_26. Con C18 lite, a causa della non ottimizzazione del codice, ho dovuto editare il linker per allocare una quantità superiore di memoria destinata al bootloader: così compilato occupa non più fino a FFFh ma arriva fino a 1081h. Ovviamente ho provveduto a riposizionare i vettori di reset sia nel bootloader che nella mia applicazione (per semplicità ho voluto esagerare e ho riservato da 0000h a 1FFFh per il bootloader e da 2000h in avanti per l'applicazione).
La compilazione così va a buon fine e se provo a programmare il micro, il bootloader si avvia regolarmente. Ma come provo a caricare l'hex della mia applicazione usando l'applicativo Microchip, per una ragione a me ignota, questo anzichè limitarsi a scrivere le locazioni a partire da 2000h, si preoccupa anche di cancellare tutto quanto si trova da 1000h in avanti, andando così a cancellare una piccola porzione di codice. Ricordo infatti che il bootloader compilato con C18 lite arriva ad occupare fino a 1081h.
Di seguito trovate lo screen con la comparazione di due dump del micro: a sinistra, con il bootloader appena caricato, a destra dopo il tentativo di programmazione con l'applicativo Microchip (che ovviametne abortisce a metà). Come si vede, il programmatore va a cancellare le locazioni da 1000h a 1081h, di fatto corrompendo il bootloader.
Se nella programmazione del bootloader inserisco il code protect da 0h a 1FFFh, il programmatore Microchip porta a termine l'operazione ma avvisa che la verifica è fallita.
A mio avviso è un difetto dell'applicativo Microchip e non so come poterlo aggirare.
Qualsiasi opinione è ben accetta. Grazie, saluti a tutti.
EDIT: Credo di aver capito, non è colpa del programmatore ma - ovviamente - del firmware del bootloader che considera come blocco di partenza del codice la locazione 1000h. Penso occorra modificare PROGRAM_MEM_START_ADDRESS nel boot.c, ancora devo provare ma credo sia questa la risposta.