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 hexadecimal que comience en 0x1000?
Con un compilador CCS que usa mi amigo, está usando 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 microchips 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
}
Una búsqueda rápida me llevó a esta discusión en el foro de Microchip donde la solución parece ser especificar --CODEOFFSET como uno de los argumentos del enlazador.
El foro también tiene un enlace a un seminario web sobre el mismo tema.
Línea de comando:
Puede pasar el desplazamiento al compilar con la línea de comando pasándolo --codeoffset=<location>
durante la vinculación (es decir, --codeoffset=0x1000
).
IDE MPLABX
Especifique el desplazamiento del código accediendo a las propiedades del proyecto -> Opciones globales XC8 -> Enlazador XC8 , cambiando las Categorías de opciones: a Opciones adicionales e ingresando el desplazamiento en el campo Desplazamiento de código :
Daniel
--CODEOFFSET 0x1000
parámetro lo muestra correctamente a partir de 0x1000. ¡Gracias!Roberto Massaioli