Estoy trabajando en el gestor de arranque pic24EP. Mi cargador de arranque tiene su propio formato de paquete para comunicarse con un script de Python para actualizar el firmware del microcontrolador. El gestor de arranque se encuentra en la primera página libre después de la Tabla de vectores de interrupción (0x000800). Para hacer espacio para la aplicación, he editado el script del enlazador de mi firmware de aplicación para que el archivo hexadecimal de la aplicación no use ningún espacio entre 0x200 y 0x005BF0. El script del enlazador del proyecto de aplicación se encuentra a continuación:
/*
** Memory Regions
*/
MEMORY
{
data (a!xr) : ORIGIN = 0x1000, LENGTH = 0x8000
reset : ORIGIN = 0x0, LENGTH = 0x4
ivt : ORIGIN = 0x4, LENGTH = 0x1FC
program (xr) : ORIGIN = 0x6000, LENGTH = 0x23FFE
FICD : ORIGIN = 0x2AFF0, LENGTH = 0x2
FPOR : ORIGIN = 0x2AFF2, LENGTH = 0x2
FWDT : ORIGIN = 0x2AFF4, LENGTH = 0x2
FOSC : ORIGIN = 0x2AFF6, LENGTH = 0x2
FOSCSEL : ORIGIN = 0x2AFF8, LENGTH = 0x2
FGS : ORIGIN = 0x2AFFA, LENGTH = 0x2
FUID0 : ORIGIN = 0x800FF8, LENGTH = 0x2
FUID1 : ORIGIN = 0x800FFA, LENGTH = 0x2
FUID2 : ORIGIN = 0x800FFC, LENGTH = 0x2
FUID3 : ORIGIN = 0x800FFE, LENGTH = 0x2
}
__FICD = 0x2AFF0;
__FPOR = 0x2AFF2;
__FWDT = 0x2AFF4;
__FOSC = 0x2AFF6;
__FOSCSEL = 0x2AFF8;
__FGS = 0x2AFFA;
__FUID0 = 0x800FF8;
__FUID1 = 0x800FFA;
__FUID2 = 0x800FFC;
__FUID3 = 0x800FFE;
__CODE_BASE = 0x6000;
__CODE_LENGTH = 0x23FFE;
__IVT_BASE = 0x4;
__DATA_BASE = 0x1000;
__DATA_LENGTH = 0x8000;
Parece que mi cargador de arranque rechaza el firmware (archivo hexadecimal) en algún punto, ya que tiene una dirección entre 0x200 y 0x005BF0, pero he editado el script del vinculador de la aplicación para usar solo las direcciones por encima de 0x6000 mediante la modificación de variables: __CODE_LENGTH y programa.
El mapa de memoria de mi microcontrolador está abajo:
Eltamañodelflashesde256kByeltamañodelapáginaesde1024instrucciones(1024*4bytes).ElarchivoHexseencuentraen
EDITAR:
He solucionado mi problema. Parece que PIC utiliza un HEX File Format
ligeramente diferente que INTEL
. Las direcciones en el archivo HEX son 2 veces la dirección real en PIC
. Por lo tanto, necesito dividir la dirección en el archivo hexadecimal por 2 para obtener la dirección flash del microcontrolador PIC.
Sin embargo, he identificado un nuevo problema con mi sistema. No puedo publicar una nueva pregunta. Entonces, lo estoy agregando aquí. Ahora, mi aplicación (bien probada) cargada a través del gestor de arranque funciona hasta que se enciende cualquier interrupción. Si alguna interrupción se dispara, se cuelga. Todo lo que puedo comprobar es que no termina en ninguna trampa. ¿Alguien puede indicarme la dirección correcta?