Тяжёлая артиллерия или отладка Arduino сетчей для МК Cortex
Порой бывают моменты когда кажется, что ты перепробовал уже всё, но код не работает. С грустью вспоминаешь о Кейле с его отладчиком. В очередной раз шлёшь лучи поноса программистам разрабатывающим Arduino IDE за то что она такая кривая и не имеет отладчика.
Но выход есть! Да, он немного корявый и тем не менее. Идея состоит в том чтобы запустить таки отладку скетча пускай и не в Arduino.
Для работы нам понадобятся:
- Тестовая версия Keil MDK-ARM.
- Отладчик Jlink или STlink. Рекомендуется иметь сразу оба если мы хотим комфортно работать с nrf из разных сред.
- Arduno скетч в формате elf.
Итак по порядку.
Программа Keil MDK-ARM стоит вполне себе солидных денег. Но во первых ищущий как известно всегда найдёт искомое, а во вторых нам достаточно триального бесплатного режима (компиляция ограничена 32 килобайтами). Но нам то компилировать не надо, нам достаточно отладки. Поэтому скачаваем его и устанавливаем.
Считаем что дрова для отладчиков уже установлены.
Наши действия такие:
- Запускаем Arduino IDE.
- Выставляем необходимый уровень сборки с отладочной информацией. Если кодим под STM32, то в файле C:\Users\указать_своего_пользователя\Documents\Arduino\hardware\Arduino_STM32\STM32F1\boards.txt вносим следующие изменения:
Было: genericSTM32F103C.menu.opt.ogstd.build.flags.optimize=-Og
Стало: genericSTM32F103C.menu.opt.ogstd.build.flags.optimize=-Og -gdwarf-2
Далее выбираем в меню:
Если же мы кодим nrf5, то данного пункта в меню нет. Поэтому нам надо временно добавить пару флагов отладки в файл - C:\Users\указать_своего_пользователя\AppData\Local\Arduino15\packages\MySensors\hardware\nRF5\0.3.0\board.txt
Было: MyBoard_nRF52832.build.extra_flags=-DNRF52 -DMYBOARDNRF5 -I{build.path}
Надо сделать: MyBoard_nRF52832.build.extra_flags=-Og -gdwarf-2 -DNRF52 -DMYBOARDNRF5 -I{build.path}
Теперь в наш исполнимый файл (файл с расширением elf) будет включена отладочная информация.
-
Собираем скетч и грузим его в МК.
-
Находим путь сборки проекта.
- Запускаем Keil MDK. И далее по картинкам.
Если у нас был открыт проект, то закрываем его.
Начинаем новый проект.
Выбираем тип МК. Если у нас его нет, то необходимо его доустановить.
Выбираем подключаемые компоненты. Можно ничего не выбирать, а сразу жать - OK.
Идём в настройки опций проекта.
На закладке Debug выбираем тип отладчика. И убираем галку с пункта Load Application at Startup.
Переходим на закладку Utilities и убираем галку с Update Target Before Debugging.
Далее переключаемся снова на закладку Debug и жмём кнопку Settings.
Преключаемся на закладку Flash Download и если поле Programming Algorithm пустое, то жмём кнопку Add.
В появившемся списке выбираем свой МК, жмём Add.
Далее нажимаем OK, затем опять OK. И наконец можно запускать отладчик. Жмём кнопку его запуска.
Далее Кейл нам ругнётся на ограничение по размеру, нажимаем OK.
И вот мы уже в отладчике, осталось только загрузить исполняемый файл. Щёлкаем по коммандной строке внизу.
И вбиваем команду: load свой путь до файла .elf
Жмём кнопку Enter.
ВСЁ!!! :)
Можно приступать к отладке.
И напоследок. Одна из самых важных вещей даруемая нам при отладке, это возможность смотреть и править регистры МК.
Данная статья написана исключительно для канала https://t.me/mysensors и группы https://t.me/mysensors_rus. Публикация данной статьи на других ресурсах разрешается только при указании первоисточника!
Dab0G.