Al construir un proyecto de mcu desnudo basado en gcc, debe encargarse de la inicialización de las secciones .data y .bss durante el inicio.¿Cómo sé de dónde necesita la sección .data obtener los datos init? (linker de gcc)
La sección .bss es bastante sencilla ya que llené toda la sección hasta 0. Pero las variables en la sección .data deben tener sus datos de inicialización en rom/flash y deben copiarse durante el inicio.
¿Cómo puedo saber dónde se encuentran los datos con los valores de inicialización?
Tomemos un ejemplo.
Digamos que puedo crear dos variables globales en main.c
unsigned int my_global_variable_one = 1;
unsigned int my_global_variable_two = 2;
entonces puedo usar objdump en el archivo de objeto para ver en qué sección estarán en, pero no puedo encontrar nada en el objdump out poner donde se deben colocar los datos init.
$ arm-none-eabi-objdump --syms main.o | grep my_global_variable
00000000 g O .data 00000004 my_global_variable_one
00000004 g O .data 00000004 my_global_variable_two
Luego puedo ver el elfo resultante para todo el sistema, en este caso main.elf.
$ arm-none-eabi-nm -n main.elf | grep my_global_variable
20000000 D my_global_variable_one
20000004 D my_global_variable_two
¿Dónde puedo encontrar dónde están para poder copiar los datos? ¿Qué debo poner en mi secuencia de comandos del enlazador?
Debe estar en algo como .text o .rodata, pero ¿cómo puedo saberlo?
¿Cómo puedo verificar dónde se encuentran los datos de inicio de my_global_variable_one?
¿Puedo encontrar dónde están estos datos con cualquiera de los comandos binutils como readelf u objdump? se utiliza
/Gracias
Esto está en un STM32 (Cortex M3) MCU, y la versión Codebench de gcc.
Bueno me di cuenta de que los datos se agregan después de la sección .text, pero me ayudó a conseguir lo suficientemente cerca :) – Johan