======Запускаем отладку программы в МК 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 и не будет его использовать при сборке проекта.