Настройки компилятора и линковщика

Первоначальные сведения о сборке на примере среды Atollic True Studio.

Так исторически сложилось , что за внешне самой красивой средой программирования всегда прячутся консольные команды , которые работают из командной строки.

Почему? - просто потому , что они созданы не для продажи (бесплатно) для программистов всея мира...

Компилятор

Настройки компилятора

фотка 1

Command : arm-atollic-eabi-gcc -c . Это компилятор , у меня находится в "C:Program Files (x86)AtollicTrueSTUDIO for STM32 9.3.0ARMToolsin".

Вот такие параметры командной строки у нас в Atollic по умолчанию для комилятора (All options):

-mthumb 
-mcpu=cortex-m3 
-std=gnu11 
-D__weak=__attribute__((weak)) 
-D__packed=__attribute__((__packed__)) 
-DUSE_HAL_DRIVER 
-DSTM32F205xx 
-I"../src/MY" 
-I../Inc 
-I../Drivers/STM32F2xx_HAL_Driver/Inc 
-I../Drivers/STM32F2xx_HAL_Driver/Inc/Legacy 
-I../Middlewares/Third_Party/FreeRTOS/Source/include 
-I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS 
-I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3 
-I../Drivers/CMSIS/Device/ST/STM32F2xx/Include 
-I../Drivers/CMSIS/Include 
-I"D:DEVELOPMENTAtollicTrueStudioSTM32F205STM32F205VGT6_FreeRtos_UsbHost_LCD_PRN_Kb_QRSrcMYQRLib" 
-Og 
-ffunction-sections 
-fdata-sections 
-g3 
-fstack-usage 
-Wall 
-specs=nano.specs

По выводу консоли сборки все ,что относится к комппиляции начинается с : arm-atollic-eabi-gcc -c !

Когда начиначется arm-atollic-eabi-gcc -o, это уже сборка (линковка).

Линковщик (сборщик)

Настройки линковки :

фотка 2

-mthumb 
-mcpu=cortex-m3 
-T"../STM32F205VE_FLASH.ld" 
-specs=nosys.specs 
-static "-Wl,-Map=${BuildArtifactFileBaseName}.map" 
-Wl,--gc-sections 
-Wl,--defsym=malloc_getpagesize_P=0x80 
-Wl,--start-group 
-lc 
-lm 
-Wl,--end-group -specs=nano.specs

Тут мы получем на выходе *.elf файл.

Закладка Build (objcopy) , Post build steps

фотка 3

Ключ "–O" определяет формат выходного файла.

objcopy физически готовит файл прошивки для контроллера , убирая лишнюю информацию из elf файла по отладке и т.д., минимизирую размер прошивки.

Выполняется objcopy в самом конце :

arm-atollic-eabi-objcopy.exe -O ihex STM32F205VGT6_FreeRtos_UsbHost_LCD_PRN_Kb_QR.elf STM32F205VGT6_FreeRtos_UsbHost_LCD_PRN_Kb_QR.hex 

Полезно в консоле сборки посмотреть :

Print size information
   text	   data	    bss	    dec	    hex	filename
  29288	    460	 108952	 138700	  21dcc	STM32F205VGT6_FreeRtos_UsbHost_LCD_PRN_Kb_QR.elf
Print size information done