He escrito una aplicación de cargador de arranque PIC32MX. Me gustaría decirle al vinculador que lo ponga por completo en la memoria de arranque, para que se mantenga todo el espacio del programa para la aplicación final.
Actualmente, las partes que creo que son relevantes de mi archivo .ld
tienen este aspecto:
_RESET_ADDR = 0xBFC00000;
_BEV_EXCPT_ADDR = (0xBFC00000 + 0x380);
_DBG_EXCPT_ADDR = (0xBFC00000 + 0x480);
_DBG_CODE_ADDR = 0xBFC02000;
_DBG_CODE_SIZE = 0xFF0 ;
_GEN_EXCPT_ADDR = _ebase_address + 0x180;
MEMORY
{
kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x10000 /* All C Files will be located here */
kseg0_boot_mem : ORIGIN = 0x9FC00000, LENGTH = 0x1000 /* This memory region is dummy */
exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x200 /* Interrupt vector table */
config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4
config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4
config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x2FF0 /* C Startup code */
kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x8000
sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000
debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10
}
Este es el script de vinculador generado por defecto, para un PIC32MX695F512H , aunque la longitud de algunos Es posible que las secciones hayan cambiado: el diseño de la memoria del chip se encuentra en la página 61 de la hoja de datos.
¿Debería simplemente cambiar los valores de ORIGIN
y LENGTH
de kseg0_program_mem
a los valores de kseg0_boot_mem
y decirle al vinculador que permita la superposición de secciones? Eso no se siente tan limpio. ¿Hay alguna manera de decirle al vinculador que ponga el código de la aplicación no en kseg0_program_mem
sino en kseg0_boot_mem
?