В первой ревизии МК 1923ВК014 отладка программы по интерфейсу JTAG недоступна, однако с использованием отладчика GDB и специальной программы заглушки (GDB stub) возможна отладка по интерфейсу UART. Подробнее об этом описано в статье Загрузка и отладка программы в МК 1923ВК014. Интерфейс отладчика GDB подразумевает взаимодействие с помощью командной строки, что является довольно гибким, но не всегда достаточно удобным способом отладки. Многие среды разработки, такие как Eclipse, Qt Creator и другие, позволяют использовать отладчик GDB, предоставляя при этом красивый и удобный графический интерфейс.
В данной статье мы рассмотрим отладку программы для МК 1923ВК014 с помощью GDB в среде Eclipse. Исходные файлы проекта можно скачать по ссылке.
Установка и настройка среды Eclipse не является простой задачей и требует некоторых знаний по процессу сборки проекта. Однако установив и настроив среду единожды, дальнейшая работа доставляет в основном только положительные эмоции.
Помимо самой среды Eclipse нам так же понадобятся следующие программные средства:
Сначала необходимо скачать и установить JRE, иначе мы не сможем запустить даже инсталлятор Eclipse. Скачать JRE можно с официального сайта, я выбрал последнюю на тот момент версию 8u211. Устанавливаем галочку «Accept License Agreement» и выбираем Offline версию в зависимости от разрядности Windows.
После этого нас отправляют на сайт входа в учётную запись Oracle, где необходимо зарегистрироваться. Без регистрации скачать JRE, к сожалению, не получится.
Теперь переходим к установке GNU ARM Embedded Toolchain, скачать который можно также с официального сайта. Я выбрал предпоследнюю версию 7-2018-q2-update, потому что в последней версии присутствует ошибка, мешающая создать hex файл. Скачиваем – устанавливаем.
Для сборки и очистки проекта в среде Eclipse нам также понадобятся дополнительные программы make и rm, которые по умолчанию в windows не установлены. Установка данных программ возможна двумя способами: с использованием менеджера пакетов xPack xpm, либо вручную, подробнее можно прочитать здесь.
Мы воспользуемся вторым способом и произведём ручную установку. Для этого переходим в официальный репозиторий Eclipse на GitHub и скачиваем архив в зависимости от версии Windows (актуальной версией на момент скачивания была v.2.12).
После скачивания разархивируем все файлы из папки bin в папку bin с установленным GNU ARM Embedded Toolchain, по умолчанию это путь: «C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin».
После установки JRE и GNU ARM переходим к установке самой Eclipse. Скачиваем инсталлятор Eclipse с официального сайта, после чего выбираем среду для разработки C/C++ приложений.
Далее указываем путь для установки (я выбрал по умолчанию) и нажимаем “Install”. В процессе установки среда предложит принять лицензионное соглашение – не отказываемся. После установки нажимаем кнопку “Launch” и запускаем среду.
При запуске нам предлагают выбрать путь к рабочему пространству, в котором будут наши проекты. Я оставил по умолчанию «eclipse-workspace».
Теперь необходимо установить плагин GNU MCU Eclipse. Для этого во вкладке Help выбираем Eclipse Marketplace….
В открывшемся окне в поле “Find” пишем GNU MCU и устанавливаем плагин, принимая лицензионное соглашение.
При установке я оставил всё по умолчанию (были выбраны все компоненты). Далее среда попросит перезапуститься – соглашаемся.
На этом этап установки среды Eclipse закончен.
Запускаем среду Eclipse, выбираем вкладку «File→New→Project» и в открывшемся окне выбираем пункт «C Project».
Далее указываем название проекта, тип проекта выбираем «Empty Project», Toolchains: «ARM Cross GCC» и нажимаем «Next».
Конфигурации оставляем без изменений (Debug и Release), жмём «Next». Далее выбираем «Toolchain name» - GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc), путь должен установиться автоматически, после чего нажимаем «Finish».
Теперь из архива в начале статьи копируем папки «GDB», «inc», «src» и файл 1923VK014.ld в папку с проектом, в моём случае это «..\eclipse-workspace\HelloWorld_Debug».
Теперь переходим в среду Eclipse, нажимаем клавишу «F5», после чего в дереве проекта должны появится скопированные папки и файлы.
Далее необходимо настроить проект для МК 1923ВК014. Для этого нажимаем вкладку «Project→Properties».
В открывшемся окне сначала необходимо указать путь к файлам «make» и «rm», для этого переходим во вкладку «С/С++ Build» → «Environment», и изменяем поле PATH, дописав в конце точку с запятой и путь:
;C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin
Далее переходим во вкладку «С/С++ Build» → «Settings» → «Tool Settings» → «Target Processor». Так как МК 1923ВК014 построен на базе Cortex-M0, то в поле «ARM family» выбираем «cortex-m0».
Далее необходимо указать пути к заголовочным файлам, делается это во вкладке «GNU ARM Cross C Compiler» → «Includes» → «Includes paths». Необходимо добавить два пути: «inc» и «GDB/inc»
Затем переходим к указанию конфигурационного файла компоновщика: «GNU ARM Cross C Linker» → «General» → «Script files».
В конфигурационном файле указываются адреса для памяти программ и памяти данных, а также прописываются секции для размещения различных частей программы.
При сборке проекта может возникнуть ошибка «error: ld returned 1 exit status». Чтобы её обойти, необходимо в настройках проекта «С/С++ Build» → «Settings» → «Toolchains» в поле «C Compiler» указать:
gcc --specs=nosys.specs
Настройка проекта на этом завершена, теперь можно запустить сборку проекта, кликнув на значок «молоточка».
Сначала необходимо создать конфигурацию для отладки. Для этого кликаем на стрелочку рядом со значком «жука» и выбираем пункт «Debug Configurations…».
В открывшемся окне двойным щелчком выбираем «GDB Hardware Debugging».
Теперь переходим во вкладку «Debugger» и в поле «GDB Command» вводим следующие параметры:
<путь к GDB.exe> <опции> <путь к ELF файлу>
Путь к GDB указываем из GNU ARM Embedded Toolchain:
C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin\arm-none-eabi-gdb.exe
В качестве опций необходимо указать скорость обмена по UART, в проекте HelloWorld_Debug указана скорость 115200 бод, поэтому указываем:
-b 115200
После компиляции ELF файл располагается в папке «Debug» проекта:
C:\Users\user.name\eclipse-workspace\HelloWorld_Debug\Debug\HelloWorld_Debug.elf
Получившаяся строка, которую необходимо записать в поле «GDB Command»:
C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin\arm-none-eabi-gdb.exe -b 115200 C:\Users\user.name\eclipse-workspace\HelloWorld_Debug\Debug\HelloWorld_Debug.elf
Далее в поле «JTAG Device» необходимо выбрать «Generic Serial», а в поле «GDB Connect String» указываем COM-порт, к которому подключён МК по UART.
Теперь переходим во вкладку «Startup», в которой указываются дополнительные действия, проводимые перед началом отладки. Обязательно убираем галочки «Load image» и «Load symbols», так как загрузку программы необходимо выполнять с использованием программы «Loader».
После этого нажимаем кнопку «Apply» и «Close».
На этом настройка отладочной конфигурации завершена. Теперь, чтобы запустить отладку, необходимо с помощью программы «Loader» загрузить файл HelloWorld_Debug.hex (располагается в папке «Debug» проекта) в МК. Подробнее про загрузку программы в МК с помощью "Loader" описано в этой статье. После загрузки программы не забываем закрыть порт в Loader'e кнопкой "Close port".
После того как МК остановится на скомпилированной точке останова (на плате загорятся все светодиоды), можно запускать отладку, зайдя в настройки конфигурации, но в этот раз выбрав кнопку «Debug».
В случае успешного запуска отладки среда предложит переключить текущее окно разработки в режим отладки. Соглашаемся и нажимаем "Switch".
Перед тем как запустить выполнение программы, необходимо установить точки останова, иначе программа запуститься, но остановить её уже будет нельзя. Для этого переходим в файл main.c и устанавливаем точку останова, например, на функции LedOn(). Теперь можно запускать выполнение программы, нажав на значок "play".
К сожалению, в режиме отладки не доступен шаг с заходом в функцию, но это легко решается установкой точки остановка на входе в функцию.
Чтобы добавить в свой проект режим отладки, необходимо:
1. Подключить в проект все Си файлы из папки GDB/src. 2. Прописать в настройках проекта «GNU ARM Cross C Compiler» → «Includes» → «Includes paths» путь к заголовочным файлам: ./GDB/inc. 3. Подключить в main.c библиотеку GDB: #include "gdb_stub.h". 4. В начале main() вызвать функцию StartGDB(), которая инициализирует и включает UART для отладки. 5. Добавить начальную точку останова, вызвав функцию gdb_bp(). Данная точка останова будет использоваться для входа в режим отладки (должна находится после включения UART). 6. Использовать startup_gdb.S из примера HelloWorld_Debug.