¿Cómo obtiene el valor del puntero de pila Cortex-M el enlazador gnu?

4

El enlazador de GNU obtiene el valor del puntero de pila de ARM Cortex del script del vinculador, y coloca ese valor en la primera ubicación de la tabla de vectores de interrupción.

Observo que la mayoría de mis scripts usan el símbolo _estack para definir el "final de la pila" (región de memoria, que en realidad es la "parte superior de la pila"), que también es la el valor que utiliza el vinculador para completar la ubicación MSP de la tabla de vectores en la imagen vinculada final.

¿Es _estack el símbolo ( requerido ) que utiliza el vinculador para generar el MSP? O, ¿hay otro símbolo o mecanismo que el enlazador de GNU use / pueda usar?

    
pregunta CMiller

1 respuesta

2

Aparentemente, no hay un comportamiento especial del enlazador GNU para obtener el valor MSP: el valor se usa en la tabla de vectores definida por CMSIS, proporcionada por el proveedor micro, y definida en el archivo de inicio (startup_stm32F303xc.s en mi proyecto):

/******************************************************************************
*
* The minimal vector table for a Cortex M4. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
*******************************************************************************/
   .section  .isr_vector,"a",%progbits
  .type  g_pfnVectors, %object
  .size  g_pfnVectors, .-g_pfnVectors


g_pfnVectors:
    .word   _estack
    .word   Reset_Handler
    .word   NMI_Handler
    ...

Supuse que el vinculador de alguna manera obtuvo el valor MSP ( _estack ) del script del vinculador. Sin embargo, es el conjunto el que simplemente apaga el valor de _estack , que el vinculador resuelve más adelante. Nada críptico: solo una tabla antigua de datos inicializados, colocada por el vinculador en la dirección apropiada para el microprocesador.

Supongo que _estack es simplemente el símbolo canónico utilizado por los proyectos basados en CMSIS y los scripts de enlaces.

    
respondido por el CMiller

Lea otras preguntas en las etiquetas