¿Cómo compensar la ubicación del programa en la memoria con MPLABX XC8?

4

Tengo un gestor de arranque que reside en las ubicaciones 0x0000 a 0x0fff en un PIC18F de 8 bits. ¿Cómo le digo al compilador XC8 que genere un archivo hex que comienza en 0x1000?

Con un compilador de CCS que usa mi amigo, usa el siguiente código:

#define LOADER_SIZE                 (0xFFF)
#define LOADER_START                (0) 
#define LOADER_END                  (LOADER_SIZE) 
#define APPLICATION_START           (LOADER_SIZE+1) 
#define APPLICATION_END             (getenv("PROGRAM_MEMORY")-1) 
#define APPLICATION_ISR             (APPLICATION_START+8) 

#ifdef _BOOTLOADER
    //in the application, this moves the reset and isr vector out of the bootload 
    //space.  it then reserves the loader space from being used by the application. 
    #build(reset=APPLICATION_START, interrupt=APPLICATION_ISR) 
    #org 0, LOADER_END {} 
#endif

Buscando en las bibliotecas de Microchip para aplicaciones (MLA), encontré esto para el compilador C18, sin embargo, el compilador XC8 no reconoce el "código #pragma".

#define REMAPPED_RESET_VECTOR_ADDRESS               0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS  0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS   0x1018

extern void _startup (void);        // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void) {
    _asm goto _startup _endasm
}
#pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
void Remapped_High_ISR (void) {
     _asm goto YourHighPriorityISRCode _endasm
}
#pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
void Remapped_Low_ISR (void) {
     _asm goto YourLowPriorityISRCode _endasm
}
#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void High_ISR (void) {
     _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
}
#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void) {
     _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
}
    
pregunta Daniel

1 respuesta

6

Una búsqueda rápida me llevó a esta discusión en el foro de Microchip donde la solución parece estar especificando --CODEOFFSET as uno de los argumentos del enlazador.

El foro también tiene un enlace a un webinar en el mismo tema.

Línea de comando:

Puede pasar el desplazamiento al compilar con la línea de comando pasando --codeoffset=<location> durante el enlace (es decir, --codeoffset=0x1000 ).

IDE MPLABX

Especifique el desplazamiento del código accediendo a propiedades del proyecto - > Opciones globales de XC8 - > El enlazador XC8 , cambiando las categorías de opciones: a Opciones adicionales , e ingresando el desplazamiento en el campo Codeoffset :

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas