Инструменты пользователя

Инструменты сайта


prog:spec:eclipsedebug

Запускаем отладку программы в МК 1923ВК014 по UART в среде Eclipse

В первой ревизии МК 1923ВК014 отладка программы по интерфейсу JTAG недоступна, однако с использованием отладчика GDB и специальной программы заглушки (GDB stub) возможна отладка по интерфейсу UART. Подробнее об этом описано в статье Загрузка и отладка программы в МК 1923ВК014. Интерфейс отладчика GDB подразумевает взаимодействие с помощью командной строки, что является довольно гибким, но не всегда достаточно удобным способом отладки. Многие среды разработки, такие как Eclipse, Qt Creator и другие, позволяют использовать отладчик GDB, предоставляя при этом красивый и удобный графический интерфейс.

В данной статье мы рассмотрим отладку программы для МК 1923ВК014 с помощью GDB в среде Eclipse. Исходные файлы проекта можно скачать по ссылке.

Установка IDE Eclipse

Установка и настройка среды Eclipse не является простой задачей и требует некоторых знаний по процессу сборки проекта. Однако установив и настроив среду единожды, дальнейшая работа доставляет в основном только положительные эмоции.

Помимо самой среды Eclipse нам так же понадобятся следующие программные средства:

  1. JRE (Java Runtime Environment) – комплекс ПО, необходимый для запуска Java-приложений (Eclipse написана на javа).
  2. GNU ARM Embedded Toolchain – набор программ (компилятор, ассемблер, компоновщик, библиотеки, отладчик GDB), необходимые для разработки программ на устройствах с ядром ARM Cortex-M.

Сначала необходимо скачать и установить 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 закончен.

Создаём и настраиваем проект для МК 1923ВК014

Запускаем среду 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.
Startup_gdb.S файл обязательно должен иметь расширение с заглавной буквой "S", иначе среда Eclipse не распознает файл как startup и не будет его использовать при сборке проекта.
prog/spec/eclipsedebug.txt · Последние изменения: 2019/05/14 11:55 — vova