======Запускаем отладку программы в МК 1923ВК014 по UART в среде Eclipse======
В первой ревизии МК 1923ВК014 отладка программы по интерфейсу JTAG недоступна, однако с использованием отладчика GDB и специальной программы заглушки (GDB stub) возможна отладка по интерфейсу UART. Подробнее об этом описано в статье [[https://startmilandr.ru/doku.php/prog:spec:1923vk014_load_and_debug#%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B |Загрузка и отладка программы в МК 1923ВК014]]. Интерфейс отладчика GDB подразумевает взаимодействие с помощью командной строки, что является довольно гибким, но не всегда достаточно удобным способом отладки. Многие среды разработки, такие как Eclipse, Qt Creator и другие, позволяют использовать отладчик GDB, предоставляя при этом красивый и удобный графический интерфейс.
В данной статье мы рассмотрим отладку программы для МК 1923ВК014 с помощью GDB в среде Eclipse. Исходные файлы проекта можно скачать [[https://drive.google.com/uc?authuser=0&id=11O1T1tpbDvoHVe0VEVqkOo342Jbszhm3&export=download|по ссылке]].
{{prog:1923:eclipse_gdb.png?500}}
=====Установка IDE Eclipse=====
Установка и настройка среды Eclipse не является простой задачей и требует некоторых знаний по процессу сборки проекта. Однако установив и настроив среду единожды, дальнейшая работа доставляет в основном только положительные эмоции.
Помимо самой среды Eclipse нам так же понадобятся следующие программные средства:
- JRE (Java Runtime Environment) – комплекс ПО, необходимый для запуска Java-приложений (Eclipse написана на javа).
- GNU ARM Embedded Toolchain – набор программ (компилятор, ассемблер, компоновщик, библиотеки, отладчик GDB), необходимые для разработки программ на устройствах с ядром ARM Cortex-M.
Сначала необходимо скачать и установить JRE, иначе мы не сможем запустить даже инсталлятор Eclipse. Скачать JRE можно с [[https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html |официального сайта]], я выбрал последнюю на тот момент версию 8u211. Устанавливаем галочку «Accept License Agreement» и выбираем Offline версию в зависимости от разрядности Windows.
{{prog:1923:JRE.png}}
После этого нас отправляют на сайт входа в учётную запись Oracle, где необходимо зарегистрироваться. Без регистрации скачать JRE, к сожалению, не получится.
Теперь переходим к установке GNU ARM Embedded Toolchain, скачать который можно также с [[https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads|официального сайта]]. Я выбрал предпоследнюю версию 7-2018-q2-update, потому что в последней версии присутствует [[https://devzone.nordicsemi.com/f/nordic-q-a/43354/linker-error-address-out-of-range-for-intel-hex-files/169424#169424|ошибка]], мешающая создать hex файл. Скачиваем – устанавливаем.
{{prog:1923:arm_gnu.png}}
Для сборки и очистки проекта в среде Eclipse нам также понадобятся дополнительные программы //make// и //rm//, которые по умолчанию в windows не установлены. Установка данных программ возможна двумя способами: с использованием менеджера пакетов xPack //xpm//, либо вручную, подробнее можно прочитать [[https://gnu-mcu-eclipse.github.io/windows-build-tools/install/ |здесь]].
Мы воспользуемся вторым способом и произведём ручную установку. Для этого переходим в официальный репозиторий Eclipse на [[https://github.com/gnu-mcu-eclipse/windows-build-tools/releases|GitHub]] и скачиваем архив в зависимости от версии Windows (актуальной версией на момент скачивания была v.2.12).
{{prog:1923:make.png}}
После скачивания разархивируем все файлы из папки //bin// в папку //bin// с установленным GNU ARM Embedded Toolchain, по умолчанию это путь: «C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin».
После установки JRE и GNU ARM переходим к установке самой Eclipse. Скачиваем инсталлятор Eclipse с [[https://www.eclipse.org/downloads/ |официального сайта]], после чего выбираем среду для разработки C/C++ приложений.
{{prog:1923:inst_eclipse.png}}
Далее указываем путь для установки (я выбрал по умолчанию) и нажимаем “Install”. В процессе установки среда предложит принять лицензионное соглашение – не отказываемся. После установки нажимаем кнопку “Launch” и запускаем среду.
При запуске нам предлагают выбрать путь к рабочему пространству, в котором будут наши проекты. Я оставил по умолчанию «eclipse-workspace».
Теперь необходимо установить плагин GNU MCU Eclipse. Для этого во вкладке //Help// выбираем //Eclipse Marketplace…//.
{{prog:1923:help.png}}
В открывшемся окне в поле “Find” пишем //GNU MCU// и устанавливаем плагин, принимая лицензионное соглашение.
{{prog:1923:gnu_mcu.png}}
При установке я оставил всё по умолчанию (были выбраны все компоненты). Далее среда попросит перезапуститься – соглашаемся.
На этом этап установки среды Eclipse закончен.
=====Создаём и настраиваем проект для МК 1923ВК014=====
Запускаем среду Eclipse, выбираем вкладку «File->New->Project» и в открывшемся окне выбираем пункт «C Project».
{{prog:1923:new_prj.png}}
Далее указываем название проекта, тип проекта выбираем «Empty Project», Toolchains: «ARM Cross GCC» и нажимаем «Next».
{{prog:1923:new_prj_1.png}}
Конфигурации оставляем без изменений (Debug и Release), жмём «Next». Далее выбираем «Toolchain name» - GNU Tools for ARM Embedded Processors (arm-none-eabi-gcc), путь должен установиться автоматически, после чего нажимаем «Finish».
{{prog:1923:new_prj_2.png}}
Теперь из архива в [[#запускаем_отладку_программы_в_мк_1923вк014_по_uart_в_среде_eclipse|начале статьи]] копируем папки «GDB», «inc», «src» и файл 1923VK014.ld в папку с проектом, в моём случае это «..\eclipse-workspace\HelloWorld_Debug».
Теперь переходим в среду Eclipse, нажимаем клавишу «F5», после чего в дереве проекта должны появится скопированные папки и файлы.
{{prog:1923:tree.png}}
Далее необходимо настроить проект для МК 1923ВК014. Для этого нажимаем вкладку «Project->Properties».
В открывшемся окне сначала необходимо указать путь к файлам «make» и «rm», для этого переходим во вкладку «С/С++ Build» -> «Environment», и изменяем поле PATH, дописав в конце точку с запятой и путь:
;C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin
{{prog:1923:make1.png}}
Далее переходим во вкладку «С/С++ Build» -> «Settings» -> «Tool Settings» -> «Target Processor». Так как МК 1923ВК014 построен на базе Cortex-M0, то в поле «ARM family» выбираем «cortex-m0».
{{prog:1923:settings_proc.png}}
Далее необходимо указать пути к заголовочным файлам, делается это во вкладке «GNU ARM Cross C Compiler» -> «Includes» -> «Includes paths». Необходимо добавить два пути: «inc» и «GDB/inc»
{{prog:1923:settings_inc.png}}
Затем переходим к указанию конфигурационного файла компоновщика: «GNU ARM Cross C Linker» -> «General» -> «Script files».
{{prog:1923:settings_link.png}}
В конфигурационном файле указываются адреса для памяти программ и памяти данных, а также прописываются секции для размещения различных частей программы.
При сборке проекта может возникнуть ошибка «error: ld returned 1 exit status». Чтобы её обойти, необходимо в настройках проекта «С/С++ Build» -> «Settings» -> «Toolchains» в поле «C Compiler» указать:
gcc --specs=nosys.specs
{{prog:1923:error.png}}
Настройка проекта на этом завершена, теперь можно запустить сборку проекта, кликнув на значок «молоточка».
{{prog:1923:comp.png}}
=====Настраиваем отладку=====
Сначала необходимо создать конфигурацию для отладки. Для этого кликаем на стрелочку рядом со значком «жука» и выбираем пункт «Debug Configurations…».
{{prog:1923:conf_debug.png}}
В открывшемся окне двойным щелчком выбираем «GDB Hardware Debugging».
{{prog:1923:debug_conf.png}}
Теперь переходим во вкладку «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.
{{prog:1923:debug_conf1.png}}
Теперь переходим во вкладку «Startup», в которой указываются дополнительные действия, проводимые перед началом отладки. Обязательно убираем галочки «Load image» и «Load symbols», так как загрузку программы необходимо выполнять с использованием программы «Loader».
{{prog:1923:debug_conf3.png}}
После этого нажимаем кнопку «Apply» и «Close».
На этом настройка отладочной конфигурации завершена. Теперь, чтобы запустить отладку, необходимо с помощью программы «Loader» загрузить файл HelloWorld_Debug.hex (располагается в папке «Debug» проекта) в МК. Подробнее про загрузку программы в МК с помощью "Loader" описано в [[https://startmilandr.ru/doku.php/prog:spec:1923vk014_load_and_debug|этой статье]]. После загрузки программы не забываем закрыть порт в Loader'e кнопкой "Close port".
После того как МК остановится на скомпилированной точке останова (на плате загорятся все светодиоды), можно запускать отладку, зайдя в настройки конфигурации, но в этот раз выбрав кнопку «Debug».
{{prog:1923:debug_conf2.png}}
В случае успешного запуска отладки среда предложит переключить текущее окно разработки в режим отладки. Соглашаемся и нажимаем "Switch".
{{prog:1923:switch.png}}
Перед тем как запустить выполнение программы, необходимо установить точки останова, иначе программа запуститься, но остановить её уже будет нельзя. Для этого переходим в файл main.c и устанавливаем точку останова, например, на функции LedOn(). Теперь можно запускать выполнение программы, нажав на значок "play".
{{prog:1923:debug.png}}
К сожалению, в режиме отладки не доступен шаг с заходом в функцию, но это легко решается установкой точки остановка на входе в функцию.
=====Добавляем отладочную заглушку в свой проект=====
Чтобы добавить в свой проект режим отладки, необходимо:
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.
Startup_gdb.S файл обязательно должен иметь расширение с заглавной буквой "S", иначе среда Eclipse не распознает файл как startup и не будет его использовать при сборке проекта.