He escrito una aplicación de bootloader para PIC32MX. Me gustaría decirle al enlazador que la ponga completamente en la memoria de arranque, para que todo el espacio de programa se mantenga para la aplicación final.
Actualmente, las que creo que son las partes relevantes de mi .ld
archivo se vea así:
_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 linker generado por defecto script, para un PIC32MX695F512H Aunque la longitud de algunas secciones puede haber cambiado, la disposición de la memoria del chip se encuentra en la página 61 de la hoja de datos.
¿Debo simplemente cambiar el ORIGIN
y LENGTH
de kseg0_program_mem
a los valores de kseg0_boot_mem
y decirle al enlazador que permita la superposición de secciones? Eso no parece tan limpio. ¿Hay alguna manera de decirle al enlazador que ponga el código de la aplicación no en kseg0_program_mem
pero en kseg0_boot_mem
?
0 votos
Acabo de leer sobre esto en este libro electrónico - No puedo responder yo mismo, pero echa un vistazo a la página 44 y puede haber información útil.
0 votos
Justo debajo de eso probablemente tienes algo como ".text ORIGIN(kseg0_program_mem) :" que le dice al enlazador que cualquier cosa en la sección .text debe estar ubicada en el segmento kseg0_program_mem. Esto no es algo que haya probado, pero probablemente podrías cambiar eso por kseg0_boot_mem en su lugar...
0 votos
Entiendo que se pregunte aquí, pero hay gente bastante decente en el foro de pic32 que entiende bien de linkers.