Перейти к содержанию
    

stm32f401ccu не вызывается __libc_init_array

Где в arm-none-eabi такое видели? В любом проекте стартап компилируется из исходника чаще всего ассемблерного .s, либо нормальный на С.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, VladislavS сказал:

Не вижу ни одного довода в пользу стартапа на asm для кортексов.

Например, тот, что к Keil-ам, IAR-ам и GCC-based IDE asm-стартапы идут из коробки в скачиваемых DFP и изобретать ничего не нужно.

Я точно так же не вижу доводов в пользу Си-шных стартапов против asm-овых. Шо то, шо это +/- одно и то же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для кортексов все стартапы отличаются только таблицей векторов прерываний. Заменить её для нового проца - дело 1 минуты.

А можно вот так сделать, чтобы один стартап под GCC, IAR и Keil был. На асме такое как? 

 

13 минут назад, Arlleex сказал:

Я точно так же не вижу доводов в пользу Си-шных стартапов против asm-овых.

 Cи-шный код оптимизируется лучше, препроцессором им проще управлять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, VladislavS сказал:

Cи-шный код оптимизируется лучше

Правда что-ли? :scratch_one-s_head:

.cpp:
u32 MotorExec()
{
  u32 j, it;
  ...
  if (j = moFault.gen_dly) return it;
  if (moSensRdy) {
    moSensRdy = j;
    MotorCtl();
  }
  return it;
}

.lst:
 if (j = moFault.gen_dly) return it;                     
0x89A0             LDRH     R0,[R4, #+12]                
0xB928             CBNZ.N   R0,??MotorExec_21            
 if (moSensRdy) {                                        
0x7CE0             LDRB     R0,[R4, #+19]                
0xB118             CBZ.N    R0,??MotorExec_21            
   moSensRdy = j;                                        
0x2000             MOVS     R0,#+0                       
0x74E0             STRB     R0,[R4, #+19]                
   MotorCtl();                                           
0x.... 0x....      BL       _Z8MotorCtlv                 
 }                                                       
 return it;                                              
       ??MotorExec_21: (+1)                              
0x4628             MOV      R0,R5                        
0xB005             ADD      SP,SP,#+20                   
0xE8BD 0x8FF0      POP      {R4-R11,PC}      ;; return   

IAR, максимальная оптимизация.

Даже не вдаваясь в глубокие оптимизации, самый посредственный человеко-программист на асме использует R1. И напишет короче на 1 команду, чем мегасупер-оптимизатор си.

А если глубоко копнуть в листинги, то окажется что это были только цветочки....  :cray:

 

Или другой перл от того же "си-оптимизатора" IAR:

            VADC.G[3].VFR = VADC.G[2].VFR = VADC.G[1].VFR = VADC.G[0].VFR = B16 - 1; 
00000098   0xF04F 0x2240      MOV      R2,#+1073758208                               
0000009C   0xF8DB 0x13A0      LDR      R1,[R11, #+928]                               
000000A0   0xF64F 0x71FF      MOVW     R1,#+65535                                    
000000A4   0xF8C2 0x15F8      STR      R1,[R2, #+1528]                               
000000A8   0xF8C2 0x19F8      STR      R1,[R2, #+2552]                               
000000AC   0xF8C2 0x1DF8      STR      R1,[R2, #+3576]                               
000000B0   0xF241 0x12F8      MOVW     R2,#+4600                                     
000000B4   0xF04F 0x2340      MOV      R3,#+1073758208                               
000000B8   0x5099             STR      R1,[R3, R2]
            RDMB(VADC.G[3].VFR);                                                             
000000BA   0x5899             LDR      R1,[R3, R2]                                           
            CCU_ADCF_S.TCSET = B0;                                  //start the fastADC timer
000000BC   0x.... 0x....      LDR.W    R2,??DataTable9_4  ;; 0x40024000                      

А ведь что мешало поместить 4600 в R3, а не в R2? Или выкинуть лишнюю LDR?

И такое в быстром ISR!:mega_shok:

А грамотный asm-программист напишет:

MOV      R2,#+1073758208
LDR      R1,[R11, #+928]
MOVW     R1,#+65535
STR      R1,[R2, #+1528]
STR      R1,[R2, #+2552]
STR      R1,[R2, #+3576]
MOVW     R3,#+4600
STR      R1,[R3, R2]
LDR      R1,[R3, R2]
ORR      R2, R2, R2, LSL #3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, jcxz сказал:

Правда что-ли? 

Я не про вообще, а конкретно про стартап для GCC. Беру стандартный асмовый из dfp и свой на С. Делают одно и то же. Код в итоге на С меньше. Оптимизация,  инлайн SystemInit и main. Где-то компилятор может паттерн копирования распознать и memcpy применить. А на асме как индус один раз написал, так оно и есть.

А в случае с IAR в стартапе для кортексов вообще ничего коме таблицы векторов нет. Зачем там асм вообще непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, VladislavS сказал:

Проверьте в map-файле, что секция init_array не пустая

stm32f401ccux_flash.ld

/*
******************************************************************************
**
** @file        : LinkerScript.ld
**
** @author      : Auto-generated by STM32CubeIDE
**
** @brief       : Linker script for STM32F401CCUx Device from STM32F4 series
**                      256Kbytes FLASH
**                      64Kbytes RAM
**
**                Set heap size, stack size and stack location according
**                to application requirements.
**
**                Set memory bank area and size if external memory is used
**
**  Target      : STMicroelectronics STM32
**
**  Distribution: The file is distributed as is, without any warranty
**                of any kind.
**
******************************************************************************
** @attention
**
** <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
** All rights reserved.</center></h2>
**
** This software component is licensed by ST under BSD 3-Clause license,
** the "License"; You may not use this file except in compliance with the
** License. You may obtain a copy of the License at:
**                        opensource.org/licenses/BSD-3-Clause
**
******************************************************************************
*/

/* Entry Point */
ENTRY(Reset_Handler)

/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */

_Min_Heap_Size = 0x200; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */

/* Memories definition */
MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 64K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 256K
}

/* Sections */
SECTIONS
{
  /* The startup code into "FLASH" Rom type memory */
  .isr_vector :
  {
    . = ALIGN(4);
    KEEP(*(.isr_vector)) /* Startup code */
    . = ALIGN(4);
  } >FLASH

  /* The program code and other data into "FLASH" Rom type memory */
  .text :
  {
    . = ALIGN(4);
    *(.text)           /* .text sections (code) */
    *(.text*)          /* .text* sections (code) */
    *(.glue_7)         /* glue arm to thumb code */
    *(.glue_7t)        /* glue thumb to arm code */
    *(.eh_frame)

    KEEP (*(.init))
    KEEP (*(.fini))

    . = ALIGN(4);
    _etext = .;        /* define a global symbols at end of code */
  } >FLASH

  /* Constant data into "FLASH" Rom type memory */
  .rodata :
  {
    . = ALIGN(4);
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
    . = ALIGN(4);
  } >FLASH

  .ARM.extab   : {
    . = ALIGN(4);
    *(.ARM.extab* .gnu.linkonce.armextab.*)
    . = ALIGN(4);
  } >FLASH

  .ARM : {
    . = ALIGN(4);
    __exidx_start = .;
    *(.ARM.exidx*)
    __exidx_end = .;
    . = ALIGN(4);
  } >FLASH

  .preinit_array     :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array*))
    PROVIDE_HIDDEN (__preinit_array_end = .);
    . = ALIGN(4);
  } >FLASH

  .init_array :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array*))
    PROVIDE_HIDDEN (__init_array_end = .);
    . = ALIGN(4);
  } >FLASH

  .fini_array :
  {
    . = ALIGN(4);
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    KEEP (*(.fini_array*))
    PROVIDE_HIDDEN (__fini_array_end = .);
    . = ALIGN(4);
  } >FLASH

  /* Used by the startup to initialize data */
  _sidata = LOADADDR(.data);

  /* Initialized data sections into "RAM" Ram type memory */
  .data :
  {
    . = ALIGN(4);
    _sdata = .;        /* create a global symbol at data start */
    *(.data)           /* .data sections */
    *(.data*)          /* .data* sections */
    *(.RamFunc)        /* .RamFunc sections */
    *(.RamFunc*)       /* .RamFunc* sections */

    . = ALIGN(4);
    _edata = .;        /* define a global symbol at data end */

  } >RAM AT> FLASH

  /* Uninitialized data section into "RAM" Ram type memory */
  . = ALIGN(4);
  .bss :
  {
    /* This is used by the startup in order to initialize the .bss section */
    _sbss = .;         /* define a global symbol at bss start */
    __bss_start__ = _sbss;
    *(.bss)
    *(.bss*)
    *(COMMON)

    . = ALIGN(4);
    _ebss = .;         /* define a global symbol at bss end */
    __bss_end__ = _ebss;
  } >RAM

  /* User_heap_stack section, used to check that there is enough "RAM" Ram  type memory left */
  ._user_heap_stack :
  {
    . = ALIGN(8);
    PROVIDE ( end = . );
    PROVIDE ( _end = . );
    . = . + _Min_Heap_Size;
    . = . + _Min_Stack_Size;
    . = ALIGN(8);
  } >RAM

  /* Remove information from the compiler libraries */
  /DISCARD/ :
  {
    libc.a ( * )
    libm.a ( * )
    libgcc.a ( * )
  }

  .ARM.attributes 0 : { *(.ARM.attributes) }
}

out.map сгенерировал путем добавления -Xlinker -Map=out.map в ключи линкера
 

Archive member included to satisfy reference by file (symbol)

/home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
                              /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o (exit)
/home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
                              /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o) (_global_impure_ptr)
/home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
                              /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o (__libc_init_array)
/home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
                              /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o (memset)
/home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
                              /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o) (_exit)

Discarded input sections

 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
 .data          0x0000000000000000        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 .text          0x0000000000000000       0x74 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .ARM.extab     0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .ARM.exidx     0x0000000000000000        0x8 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .ARM.attributes
                0x0000000000000000       0x1c /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
 .text          0x0000000000000000       0x14 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
 .data          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
 .bss           0x0000000000000000        0x0 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
 .text          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
 .data          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
 .bss           0x0000000000000000        0x0 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
 .rodata.APBPrescTable
                0x0000000000000000        0x8 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/generator.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/generator.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/generator.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/generator.o
 .text          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/generator.o
 .data          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/generator.o
 .bss           0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project17rcc_configurationEv
                0x0000000000000000       0x18 .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project17pwm_configurationEv
                0x0000000000000000       0x3c .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project13configurationEv
                0x0000000000000000        0xe .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project17pin_configurationEv
                0x0000000000000000        0x2 .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project13set_frequencyEv
                0x0000000000000000        0x2 .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN6Namespace13Project13get_frequencyEv
                0x0000000000000000        0x4 .pio/build/blackpill_f401cc/src/generator.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/main.o
 .group         0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/main.o
 .text          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/main.o
 .data          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/main.o
 .bss           0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/main.o
 .text._Z11EXTI_enablev
                0x0000000000000000       0x44 .pio/build/blackpill_f401cc/src/main.o
 .bss._ZGVN6Namespace13Project10tranceiverE
                0x0000000000000000        0x4 .pio/build/blackpill_f401cc/src/main.o
 .bss._ZN6Namespace13Project10tranceiverE
                0x0000000000000000        0x8 .pio/build/blackpill_f401cc/src/main.o
 .text          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
 .data          0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
 .bss           0x0000000000000000        0x0 .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
 .text._ZN6Namespace5ghth8transmitESt17basic_string_viewIcSt11char_traitsIcEE
                0x0000000000000000       0x26 .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .text.exit     0x0000000000000000       0x28 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .debug_frame   0x0000000000000000       0x28 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .ARM.attributes
                0x0000000000000000       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-exit.o)
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .data._impure_ptr
                0x0000000000000000        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .data.impure_data
                0x0000000000000000       0x60 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .rodata._global_impure_ptr
                0x0000000000000000        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .ARM.attributes
                0x0000000000000000       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-impure.o)
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .text.memset   0x0000000000000000       0x10 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .debug_frame   0x0000000000000000       0x20 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .ARM.attributes
                0x0000000000000000       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-memset.o)
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .text._exit    0x0000000000000000        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .debug_frame   0x0000000000000000       0x20 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .ARM.attributes
                0x0000000000000000       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a(_exit.o)
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
 .eh_frame      0x0000000000000000        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
 .ARM.attributes
                0x0000000000000000       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
 .text          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
 .data          0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
 .bss           0x0000000000000000        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o

Memory Configuration

Name             Origin             Length             Attributes
RAM              0x0000000020000000 0x0000000000010000 xrw
FLASH            0x0000000008000000 0x0000000000040000 xr
*default*        0x0000000000000000 0xffffffffffffffff

Linker script and memory map

LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/crt0.o
LOAD .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
LOAD .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
LOAD .pio/build/blackpill_f401cc/src/generator.o
LOAD .pio/build/blackpill_f401cc/src/main.o
LOAD .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
START GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/libgcc.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libstdc++_nano.a
END GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libstdc++_nano.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libm.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a
START GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/libgcc.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a
END GROUP
START GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/libgcc.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a
END GROUP
START GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/libgcc.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libnosys.a
END GROUP
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtend.o
LOAD /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
                0x0000000020010000                _estack = (ORIGIN (RAM) + LENGTH (RAM))
                0x0000000000000200                _Min_Heap_Size = 0x200
                0x0000000000000400                _Min_Stack_Size = 0x400

.isr_vector     0x0000000008000000      0x194
                0x0000000008000000                . = ALIGN (0x4)
 *(.isr_vector)
 .isr_vector    0x0000000008000000      0x194 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
                0x0000000008000000                g_pfnVectors
                0x0000000008000194                . = ALIGN (0x4)

.text           0x0000000008000194      0x434
                0x0000000008000194                . = ALIGN (0x4)
 *(.text)
 .text          0x0000000008000194       0x40 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 *(.text*)
 .text.Reset_Handler
                0x00000000080001d4       0x50 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
                0x00000000080001d4                Reset_Handler
 .text.Default_Handler
                0x0000000008000224        0x2 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
                0x0000000008000224                RTC_Alarm_IRQHandler
                0x0000000008000224                EXTI2_IRQHandler
                0x0000000008000224                DebugMon_Handler
                0x0000000008000224                SPI4_IRQHandler
                0x0000000008000224                TIM1_CC_IRQHandler
                0x0000000008000224                DMA2_Stream5_IRQHandler
                0x0000000008000224                HardFault_Handler
                0x0000000008000224                DMA1_Stream5_IRQHandler
                0x0000000008000224                SysTick_Handler
                0x0000000008000224                PVD_IRQHandler
                0x0000000008000224                SDIO_IRQHandler
                0x0000000008000224                TAMP_STAMP_IRQHandler
                0x0000000008000224                PendSV_Handler
                0x0000000008000224                NMI_Handler
                0x0000000008000224                EXTI3_IRQHandler
                0x0000000008000224                I2C3_ER_IRQHandler
                0x0000000008000224                I2C2_EV_IRQHandler
                0x0000000008000224                DMA1_Stream2_IRQHandler
                0x0000000008000224                FPU_IRQHandler
                0x0000000008000224                UsageFault_Handler
                0x0000000008000224                DMA2_Stream2_IRQHandler
                0x0000000008000224                SPI1_IRQHandler
                0x0000000008000224                TIM1_BRK_TIM9_IRQHandler
                0x0000000008000224                DMA2_Stream3_IRQHandler
                0x0000000008000224                ghth6_IRQHandler
                0x0000000008000224                DMA2_Stream0_IRQHandler
                0x0000000008000224                I2C1_EV_IRQHandler
                0x0000000008000224                DMA1_Stream6_IRQHandler
                0x0000000008000224                DMA1_Stream1_IRQHandler
                0x0000000008000224                TIM3_IRQHandler
                0x0000000008000224                RCC_IRQHandler
                0x0000000008000224                Default_Handler
                0x0000000008000224                EXTI15_10_IRQHandler
                0x0000000008000224                ADC_IRQHandler
                0x0000000008000224                DMA1_Stream7_IRQHandler
                0x0000000008000224                TIM5_IRQHandler
                0x0000000008000224                DMA2_Stream7_IRQHandler
                0x0000000008000224                I2C3_EV_IRQHandler
                0x0000000008000224                EXTI9_5_IRQHandler
                0x0000000008000224                RTC_WKUP_IRQHandler
                0x0000000008000224                SPI2_IRQHandler
                0x0000000008000224                MemManage_Handler
                0x0000000008000224                DMA1_Stream0_IRQHandler
                0x0000000008000224                SVC_Handler
                0x0000000008000224                EXTI4_IRQHandler
                0x0000000008000224                WWDG_IRQHandler
                0x0000000008000224                TIM2_IRQHandler
                0x0000000008000224                OTG_FS_WKUP_IRQHandler
                0x0000000008000224                TIM1_TRG_COM_TIM11_IRQHandler
                0x0000000008000224                EXTI1_IRQHandler
                0x0000000008000224                ghth2_IRQHandler
                0x0000000008000224                I2C2_ER_IRQHandler
                0x0000000008000224                DMA2_Stream1_IRQHandler
                0x0000000008000224                FLASH_IRQHandler
                0x0000000008000224                DMA2_Stream4_IRQHandler
                0x0000000008000224                BusFault_Handler
                0x0000000008000224                ghth1_IRQHandler
                0x0000000008000224                OTG_FS_IRQHandler
                0x0000000008000224                SPI3_IRQHandler
                0x0000000008000224                DMA1_Stream4_IRQHandler
                0x0000000008000224                I2C1_ER_IRQHandler
                0x0000000008000224                DMA2_Stream6_IRQHandler
                0x0000000008000224                DMA1_Stream3_IRQHandler
 *fill*         0x0000000008000226        0x2 
 .text.SystemInit
                0x0000000008000228       0x14 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
                0x0000000008000228                SystemInit
 .text.SystemCoreClockUpdate
                0x000000000800023c       0x74 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
                0x000000000800023c                SystemCoreClockUpdate
 .text.TIM1_UP_TIM10_IRQHandler
                0x00000000080002b0       0x88 .pio/build/blackpill_f401cc/src/generator.o
                0x00000000080002b0                TIM1_UP_TIM10_IRQHandler
 .text.startup._GLOBAL__sub_I__ZN6Namespace13Project13configurationEv
                0x0000000008000338       0x34 .pio/build/blackpill_f401cc/src/generator.o
 .text._ZN5Clock12enable_clockEmmmm
                0x000000000800036c       0x74 .pio/build/blackpill_f401cc/src/main.o
                0x000000000800036c                Clock::enable_clock(unsigned long, unsigned long, unsigned long, unsigned long)
 .text._Z10rcc_enablev
                0x00000000080003e0       0x28 .pio/build/blackpill_f401cc/src/main.o
                0x00000000080003e0                rcc_enable()
 .text._Z10TIM_enablev
                0x0000000008000408       0x48 .pio/build/blackpill_f401cc/src/main.o
                0x0000000008000408                TIM_enable()
 .text.startup.main
                0x0000000008000450       0x30 .pio/build/blackpill_f401cc/src/main.o
                0x0000000008000450                main
 .text.TIM4_IRQHandler
                0x0000000008000480       0x24 .pio/build/blackpill_f401cc/src/main.o
                0x0000000008000480                TIM4_IRQHandler
 .text.EXTI0_IRQHandler
                0x00000000080004a4       0x24 .pio/build/blackpill_f401cc/src/main.o
                0x00000000080004a4                EXTI0_IRQHandler
 .text.startup._GLOBAL__sub_I__ZN5Clock12enable_clockEmmmm
                0x00000000080004c8       0x44 .pio/build/blackpill_f401cc/src/main.o
 .text._ZN6Namespace5ghthC2EPV13ghth_TypeDefRKm
                0x000000000800050c       0x4c .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
                0x000000000800050c                Namespace::ghth::ghth(ghth_TypeDef volatile*, unsigned long const&)
                0x000000000800050c                Namespace::ghth::ghth(ghth_TypeDef volatile*, unsigned long const&)
 .text._ZN6Namespace5ghth8transmitERKh
                0x0000000008000558        0xe .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
                0x0000000008000558                Namespace::ghth::transmit(unsigned char const&)
 *fill*         0x0000000008000566        0x2 
 .text.__libc_init_array
                0x0000000008000568       0x48 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
                0x0000000008000568                __libc_init_array
 *(.glue_7)
 .glue_7        0x00000000080005b0        0x0 linker stubs
 *(.glue_7t)
 .glue_7t       0x00000000080005b0        0x0 linker stubs
 *(.eh_frame)
 .eh_frame      0x00000000080005b0        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 *(.init)
 .init          0x00000000080005b0        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
                0x00000000080005b0                _init
 .init          0x00000000080005b4        0x8 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
 *(.fini)
 .fini          0x00000000080005bc        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
                0x00000000080005bc                _fini
 .fini          0x00000000080005c0        0x8 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
                0x00000000080005c8                . = ALIGN (0x4)
                0x00000000080005c8                _etext = .

.vfp11_veneer   0x00000000080005c8        0x0
 .vfp11_veneer  0x00000000080005c8        0x0 linker stubs

.v4_bx          0x00000000080005c8        0x0
 .v4_bx         0x00000000080005c8        0x0 linker stubs

.iplt           0x00000000080005c8        0x0
 .iplt          0x00000000080005c8        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o

.rodata         0x00000000080005c8       0x10
                0x00000000080005c8                . = ALIGN (0x4)
 *(.rodata)
 *(.rodata*)
 .rodata.AHBPrescTable
                0x00000000080005c8       0x10 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
                0x00000000080005c8                AHBPrescTable
                0x00000000080005d8                . = ALIGN (0x4)

.rel.dyn        0x00000000080005d8        0x0
 .rel.iplt      0x00000000080005d8        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o

.ARM.extab      0x00000000080005d8        0x0
                0x00000000080005d8                . = ALIGN (0x4)
 *(.ARM.extab* .gnu.linkonce.armextab.*)
                0x00000000080005d8                . = ALIGN (0x4)

.ARM            0x00000000080005d8        0x0
                0x00000000080005d8                . = ALIGN (0x4)
                0x00000000080005d8                __exidx_start = .
 *(.ARM.exidx*)
                0x00000000080005d8                __exidx_end = .
                0x00000000080005d8                . = ALIGN (0x4)

.preinit_array  0x00000000080005d8        0x0
                0x00000000080005d8                . = ALIGN (0x4)
                0x00000000080005d8                PROVIDE (__preinit_array_start, .)
 *(.preinit_array*)
                0x00000000080005d8                PROVIDE (__preinit_array_end, .)
                0x00000000080005d8                . = ALIGN (0x4)

.init_array     0x00000000080005d8        0xc
                0x00000000080005d8                . = ALIGN (0x4)
                0x00000000080005d8                PROVIDE (__init_array_start, .)
 *(SORT_BY_NAME(.init_array.*))
 *(.init_array*)
 .init_array    0x00000000080005d8        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 .init_array    0x00000000080005dc        0x4 .pio/build/blackpill_f401cc/src/generator.o
 .init_array    0x00000000080005e0        0x4 .pio/build/blackpill_f401cc/src/main.o
                0x00000000080005e4                PROVIDE (__init_array_end, .)
                0x00000000080005e4                . = ALIGN (0x4)

.fini_array     0x00000000080005e4        0x4
                0x00000000080005e4                . = ALIGN (0x4)
                [!provide]                        PROVIDE (__fini_array_start, .)
 *(SORT_BY_NAME(.fini_array.*))
 *(.fini_array*)
 .fini_array    0x00000000080005e4        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
                [!provide]                        PROVIDE (__fini_array_end, .)
                0x00000000080005e8                . = ALIGN (0x4)
                0x00000000080005e8                _sidata = LOADADDR (.data)

.data           0x0000000020000000      0x608 load address 0x00000000080005e8
                0x0000000020000000                . = ALIGN (0x4)
                0x0000000020000000                _sdata = .
 *(.data)
 *(.data*)
 .data.SystemCoreClock
                0x0000000020000000        0x4 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
                0x0000000020000000                SystemCoreClock
 .data._ZN6Namespace13Project18tableE
                0x0000000020000004      0x5fa .pio/build/blackpill_f401cc/src/generator.o
                0x0000000020000004                Namespace::Project::table
 *fill*         0x00000000200005fe        0x2 
 .data._ZN6Namespace13Project9_TIM_baseE
                0x0000000020000600        0x4 .pio/build/blackpill_f401cc/src/generator.o
                0x0000000020000600                Namespace::Project::_TIM_base
 .data._ZZ24TIM1_UP_TIM10_IRQHandlerE7phase_V
                0x0000000020000604        0x2 .pio/build/blackpill_f401cc/src/generator.o
 .data._ZZ24TIM1_UP_TIM10_IRQHandlerE7phase_W
                0x0000000020000606        0x2 .pio/build/blackpill_f401cc/src/generator.o
 *(.RamFunc)
 *(.RamFunc*)
                0x0000000020000608                . = ALIGN (0x4)
                0x0000000020000608                _edata = .

.igot.plt       0x0000000020000608        0x0 load address 0x0000000008000bf0
 .igot.plt      0x0000000020000608        0x0 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
                0x0000000020000608                . = ALIGN (0x4)

.bss            0x0000000020000608       0x34 load address 0x0000000008000bf0
                0x0000000020000608                _sbss = .
                0x0000000020000608                __bss_start__ = _sbss
 *(.bss)
 .bss           0x0000000020000608       0x1c /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 *(.bss*)
 .bss._ZGVN6Namespace13Project10tranceiverE
                0x0000000020000624        0x4 .pio/build/blackpill_f401cc/src/generator.o
                0x0000000020000624                guard variable for Namespace::Project::tranceiver
 .bss._ZN6Namespace13Project10tranceiverE
                0x0000000020000628        0x8 .pio/build/blackpill_f401cc/src/generator.o
                0x0000000020000628                Namespace::Project::tranceiver
 .bss._ZZ24TIM1_UP_TIM10_IRQHandlerE7phase_U
                0x0000000020000630        0x2 .pio/build/blackpill_f401cc/src/generator.o
 *fill*         0x0000000020000632        0x2 
 .bss.debugger  0x0000000020000634        0x8 .pio/build/blackpill_f401cc/src/main.o
                0x0000000020000634                debugger
 *(COMMON)
                0x000000002000063c                . = ALIGN (0x4)
                0x000000002000063c                _ebss = .
                0x000000002000063c                __bss_end__ = _ebss

._user_heap_stack
                0x000000002000063c      0x604 load address 0x0000000008000bf0
                0x0000000020000640                . = ALIGN (0x8)
 *fill*         0x000000002000063c        0x4 
                [!provide]                        PROVIDE (end, .)
                [!provide]                        PROVIDE (_end, .)
                0x0000000020000840                . = (. + _Min_Heap_Size)
 *fill*         0x0000000020000640      0x200 
                0x0000000020000c40                . = (. + _Min_Stack_Size)
 *fill*         0x0000000020000840      0x400 
                0x0000000020000c40                . = ALIGN (0x8)

/DISCARD/
 libc.a(*)
 libm.a(*)
 libgcc.a(*)

.ARM.attributes
                0x0000000000000000       0x2c
 *(.ARM.attributes)
 .ARM.attributes
                0x0000000000000000       0x1e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crti.o
 .ARM.attributes
                0x000000000000001e       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 .ARM.attributes
                0x000000000000004c       0x21 .pio/build/blackpill_f401cc/FrameworkCMSIS/gcc/startup_stm32f401xc.o
 .ARM.attributes
                0x000000000000006d       0x35 .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
 .ARM.attributes
                0x00000000000000a2       0x35 .pio/build/blackpill_f401cc/src/generator.o
 .ARM.attributes
                0x00000000000000d7       0x35 .pio/build/blackpill_f401cc/src/main.o
 .ARM.attributes
                0x000000000000010c       0x35 .pio/build/blackpill_f401cc/src/stm32f4_ghth.o
 .ARM.attributes
                0x0000000000000141       0x2e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
 .ARM.attributes
                0x000000000000016f       0x1e /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtn.o
OUTPUT(.pio/build/blackpill_f401cc/firmware.elf elf32-littlearm)

.comment        0x0000000000000000       0x7e
 .comment       0x0000000000000000       0x7e .pio/build/blackpill_f401cc/FrameworkCMSIS/system_stm32f4xx.o
                                         0x7f (size before relaxing)
 .comment       0x000000000000007e       0x7f .pio/build/blackpill_f401cc/src/generator.o
 .comment       0x000000000000007e       0x7f .pio/build/blackpill_f401cc/src/main.o
 .comment       0x000000000000007e       0x7f .pio/build/blackpill_f401cc/src/stm32f4_ghth.o

.debug_frame    0x0000000000000000       0x2c
 .debug_frame   0x0000000000000000       0x2c /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib/thumb/v7e-m/libc_nano.a(lib_a-init.o)
 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну отлично. Три конструктора. Нужный среди них есть?

Можно даже самому позапускать их вот таким кодом

extern void(*__init_array_start[])(void) __attribute__((weak));
extern void(*__init_array_end[])(void) __attribute__((weak));


for (void(**fConstr)() = __init_array_start; fConstr < __init_array_end; (*fConstr++)());

Или сразу нужный из массива запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, VladislavS сказал:

Ну отлично. Три конструктора. Нужный среди них есть?

Если не секрет, где это вы нашли?

 

 

16 минут назад, VladislavS сказал:

Можно даже самому позапускать их вот таким кодом

Не совсем понимаю, откуда запускать. С main()? попробовал, ничего не вышло

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, oldbrowze сказал:

Если не секрет, где это вы нашли?

Цитата

init_array     0x00000000080005d8        0xc
                0x00000000080005d8                . = ALIGN (0x4)
                0x00000000080005d8                PROVIDE (__init_array_start, .)
 *(SORT_BY_NAME(.init_array.*))
 *(.init_array*)
 .init_array    0x00000000080005d8        0x4 /home/oldbrowze/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m/crtbegin.o
 .init_array    0x00000000080005dc        0x4 .pio/build/blackpill_f401cc/src/generator.o
 .init_array    0x00000000080005e0        0x4 .pio/build/blackpill_f401cc/src/main.o
                0x00000000080005e4                PROVIDE (__init_array_end, .)

 

15 минут назад, oldbrowze сказал:

Не совсем понимаю, откуда запускать.

В идеале, вместо __libc_init_array, но можно и из main, я же не знаю что у вас там за код, не пойдёт ли дым от этого...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, VladislavS сказал:

 

В идеале, вместо __libc_init_array, но можно и из main, я же не знаю что у вас там за код, не пойдёт ли дым от этого...

Не пойдет, конечно))

Два вопроса:

1. Поскольку стартап у меня на асм, попробовал вставить в мейн, но ничего не сработало..

2. Какую роль исполняет тогда libc_init_array? Я полагал, что это как раз-таки ее задача?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну смотрите. У вас потенциально может быть две проблемы:

1. Компилятор не добавляет в init_array нужный вам конструктор.

2. Стартап (посредством libc_init_array) не вызывает его.

Надо понять какой у вас случай. В принципе, после  libc_init_array в стартапе сразу main вызывается. Если в стартапе убрать вызов libc_init_array и вызывать конструкторы в начале main моим кодом , то ничего не изменится. У вас в коде есть и другие конструкторы, на время отладки исключите их из кода, так будет проще. Ну и отладчиком пройдитесь, разобраться что за три адреса лежит в секции init_array не должно составить проблему.

19 минут назад, oldbrowze сказал:

Какую роль исполняет тогда libc_init_array?

Можно скачать исходники clib и посмотреть. По идее, там очень похожий на то что я привёл код, только ещё для секции preinit_array. Но она пустая, можно туда не рыть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А грамотный asm-программист напишет:
Грамотный (в профессиональном смысле) магических чисел не набУхает ;-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, oldbrowze сказал:

Поскольку стартап у меня на асм

Ещё один довод не в пользу асма.

 

 

startup_gcc_stm32f401xx.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...