- Assembly 95.9%
- Makefile 4.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .gitignore | ||
| main.s | ||
| Makefile | ||
| README.md | ||
| startup_stm32f407vgtx.s | ||
| stm32_defs_converted.s | ||
| STM32F407VGTX_FLASH.ld | ||
STM32 minimal project
Зависимости
Debian:
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi gdb-multiarch openocd make gdb-multiarch
ArchLinux:
sudo pacman -S arm-none-eabi-gcc arm-none-eabi-binutils gdb openocd make
Файлы
.
├── main.s # Основной файл с кодом на assembler
├── Makefile # Скрипт для сборки и записи в контроллер
├── README.md # Вы здесь
├── startup_stm32f407vgtx.s # Код инициализации контроллера
└── STM32F407VGTX_FLASH.ld # Файл линковщика
Файлы startup_stm32f407vgtx.s и STM32F407VGTX_FLASH.ld сгенерированы STM32CubeIDE и взяты из её проекта.
Написание кода
Код пишем в main.s, остальные файлы не трогаем. Сборка и запись происходит через make.
Собрать проект:
make clean && make
Залить на плату:
make flash
Удалить временные файлы после сборки:
make clean
Отладка
Запуск отладчика:
openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg
Подключение GDB:
gdb-multiarch button_led.elf -ex "target remote :3333"
После подключения инициализируем GDB:
monitor reset halt # Останавливает MCU на старте
load # Прошивает ELF в Flash
continue # Старт выполнения
Дальше:
stepi
info registers
x/10i $pc
Дальше можно дебажить. Таблица полезных команд GDB:
Управление выполнением
Ctrl+C Прервать выполнение программы
continue Продолжить выполнение
stepi Выполнить одну машинную инструкцию
nexti Как stepi, но без захода в ветвления/вызовы
finish Дойти до выхода из текущей функции
Breakpints
break main Остановиться в функции main
break *0x08000240 Остановиться по адресу
info breakpoints Показать все точки остановки
delete N Удалить breakpoint номер N
Регистры
info registers Показать все регисты CPU
print $r0 Показать конкретный регистр
print $pc Текущий адрес исполнения
print $sp Stack pointer
display $r0 Автоматически показывать при каждом шаге
Память
x/10x 0x20000000 10 слов памяти в hex (RAM)
x/10i $pc Дизассемблер текущей инструкции
x/4w $sp Посмотреть стек (4 слова)
x/s 0x20000000 Строка в памяти
Отладка кода
disassemble main Ассемблер функции
layout asm TUI режим (ассемблер)
layout regs Показ регистров в UI
si / stepi шаг по инструкциям
ni / nexti шаг без захода внутрь
OpenOCD команды через GDB
monitor reset halt Сброс + останов MCU
monitor reset init Полный reset + init debug
monitor halt Просто остановить CPU
monitor resume Продолжить (альтернатива continue)
Загрузка программы
load Залить ELF в Flash
file button_led.elf Переключить бинарник