Portar un script de enlace desde STM32F1 a STM32F2

2

Estoy intentando portar PyMite de STM32F1 a STM32F2. Uno de los archivos que supongo que se debe cambiar se llama stm32f10x.ld . He buscado un equivalente de esto (llamado stm32f2xx.ld ?) Pero no he encontrado nada.

Ahora estoy pensando que tal vez debería transferir "a mano" el script del vinculador. A continuación se muestra el script de enlace original. ¿Qué tipo de cambios debería hacer para que funcione para STM32F2?

MEMORY
{
    sram (W!RX) : ORIGIN = 0x20000000, LENGTH = 64k
    flash (RX) : ORIGIN = 0x08000000, LENGTH = 512k
}

SECTIONS
{  
    .text :
    {
        . = ALIGN(4);
        _text = .;
        PROVIDE(stext = .);
        KEEP(*(.isr_vector))
        KEEP(*(.init))
        *(.text .text.*)        
        *(.rodata .rodata.*)        
        *(.gnu.linkonce.t.*)
        *(.glue_7)
        *(.glue_7t)
        *(.gcc_except_table)
        *(.gnu.linkonce.r.*)
        . = ALIGN(4);
        _etext = .;
        _sidata = _etext;
        PROVIDE(etext = .);   
            _fini = . ;
                *(.fini)

    } >flash

    .data : AT (_etext)
    {
        . = ALIGN(4);
        _sdata = .;
        *(.ramfunc .ramfunc.* .fastrun .fastrun.*)
        *(.data .data.*)
        *(.gnu.linkonce.d.*)
        . = ALIGN(4);
        _edata = .;
    } >sram

        .ARM.extab :
        {
            *(.ARM.extab*)
        } >sram

        __exidx_start = .;
        .ARM.exidx :
        {
            *(.ARM.exidx*)
        } >sram
        __exidx_end = .;

    .bss (NOLOAD) : {
        . = ALIGN(4);
        /* This is used by the startup in order to initialize the .bss secion */
        _sbss = .;
        *(.bss .bss.*)
        *(.gnu.linkonce.b.*)
        *(COMMON)
        . = ALIGN(4);        
        _ebss = .;
    } >sram

    end = .;
    PROVIDE( _estack = 0x20010000 );
}
    
pregunta Randomblue

1 respuesta

3

La mayoría de las "familias" de chips utilizan un diseño de memoria similar, por lo que podría "simplemente funcionar" sin cambios.

En este script solo hay 2 cosas que se entremezclan:

MEMORY
{
    sram (W!RX) : ORIGIN = 0x20000000, LENGTH = 64k
    flash (RX) : ORIGIN = 0x08000000, LENGTH = 512k
}

La sección MEMORY debe verificarse de nuevo en la hoja de datos / manual de referencia si las direcciones y los tamaños de SRAM y FLASH son correctos.

El otro punto es el final de la pila _estack , ya que está codificado:

PROVIDE( _estack = 0x20010000 );

Es posible que hayas notado que este es el "final de la SRAM", ya que 0x20000000 + 64k es exactamente %código%. Es posible que tengas que cambiar esto en consecuencia.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas