Перейдем в каталог нашего базового проекта:
nis@jane ~/stm32/f4examples $ cd 01-gpio/00-base/
nis@jane ~/stm32/f4examples/01-gpio/00-base $
Создадим рабочий файл кода в котором будут происходить все действия наших программ - work.c:
nis@jane ~/stm32/f4examples/01-gpio/00-base $ touch work.c
Также нам потребуется заголовычный файл work.h где мы опишем необходимые константы:
nis@jane ~/stm32/f4examples/01-gpio/00-base $ touch work.h
Для выполнения кода потребуется изменить изменить startup.c.
Если все действия были правильными то проект должен собраться без ошибок и предупреждений:
nis@jane ~/stm32/f4examples/01-gpio/00-base $ make
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F4XX -I. -I/home/nis/stm32/stlink/example/libs_stm/inc/base -I/home/nis/stm32/stlink/example/libs_stm/inc/core_support -I/home/nis/stm32/stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f4xxxg_flash.ld -c -o startup.o startup.c
arm-softfloat-linux-gnueabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -mcpu=cortex-m3 -DSTM32F4XX -I. -I/home/nis/stm32/stlink/example/libs_stm/inc/base -I/home/nis/stm32/stlink/example/libs_stm/inc/core_support -I/home/nis/stm32/stlink/example/libs_stm/inc/device_support -Wl,-T,stm32f4xxxg_flash.ld -o firmware.elf work.o startup.o -L.
arm-softfloat-linux-gnueabi-objcopy -O binary firmware.elf firmware.bin
После сборки размер файла firmware.bin увеличился на 4 байта(раньше было 12байт):
nis@jane ~/stm32/f4examples/01-gpio/00-base $ ll
итого 44
-rwxr-xr-x 1 nis nis 16 июня 23 11:12 firmware.bin
-rwxr-xr-x 1 nis nis 35329 июня 23 11:12 firmware.elf
-rw-r--r-- 1 nis nis 1369 июня 23 11:11 Makefile
-rw-r--r-- 1 nis nis 32 июня 21 12:55 README
-rw-r--r-- 1 nis nis 684 июня 23 11:12 startup.c
-rw-r--r-- 1 nis nis 2784 июня 23 11:12 startup.o
-rw-r--r-- 1 nis nis 1671 апр. 8 19:09 stm32f4xxxg_flash.ld
-rw-r--r-- 1 nis nis 421 июня 22 11:08 work.c
-rw-r--r-- 1 nis nis 641 июня 23 11:01 work.h
-rw-r--r-- 1 nis nis 2292 июня 23 11:11 work.o
Это произошло по причине добавления функии work(), которая как видно из листинга дизассемблера занимает как раз 4 байта:
nis@jane ~/stm32/f4examples/01-gpio/00-base $ arm-softfloat-linux-gnueabi-objdump -D firmware.elf
firmware.elf: file format elf32-littlearm
Disassembly of section .text:
08000000 <vector_table>:
8000000: 2001bffc strdcs fp, [r1], -ip
8000004: 0800000d stmdaeq r0, {r0, r2, r3}
08000008 <work>:
8000008: e7fe b.n 8000008 <work>
800000a: bf00 nop
0800000c <reset_handler>:
800000c: f7ff bffc b.w 8000008 <work>
На этом подготовка базовой части закончена.