Базовая часть

Перейдем в каталог нашего базового проекта:

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>

На этом подготовка базовой части закончена.