50002

[i] Установка IDE Eclipse. Особенности создания проекта для МК К1986ВЕ92QI (К1986ВЕ92FI, К1986ВЕ92F1I, К1986ВЕ94GI) с использованием SPL и его отладка.

Автор статьи: Лампадов Илья Александрович (Инженер)
Дата последнего изменения: 29.11.2023 13:52:57
Материал из настоящей статьи, относящийся к микросхеме К1986ВЕ92QI, распространяется в том числе на микроконтроллеры К1986ВЕ92FI, К1986ВЕ92F1I и К1986ВЕ94GI
Отдел технической поддержки компании Миландр официально выпускает установочные паки с файлами поддержки для IDE Keil и IAR. Для открытой и бесплатной интегрированной среды разработки Eclipse файлов поддержки нет, поэтому в данной статье будут рассмотрены особенности работы в IDE Eclipse с микроконтроллерами компании Миландр, в частности, с микроконтроллером К1986ВЕ92QI. Здесь важно отметить, что вся работа будет выполняться в ОС Windows, тем не менее, аналогичный запуск можно произвести и в ОС Linux. Периодически будет проводиться параллель со статьей информационного портала, в которой рассматривается работа в IDE Eclipse с микроконтроллером К1986ВК025 (микроконтроллер построен на архитектуре RISC-V).

Все выкладки будут также доступны для просмотра в рамках приложенного к статье проекта.

В статье будут рассмотрены следующие вопросы:

1. Установка IDE Eclipse и всех сопутствующих инструментов для работы;

2. Создание проекта в IDE Eclipse, его настройка и интегрирование стандартной библиотеки SPL в проект;

3. Особенности создания ключевых файлов поддержки микроконтроллера: файл со сценарием компоновщика .ld и ассемблерный файл инициализации startup.s;

4. Настройка отладочной сессии.

Приступим.

Установка IDE Eclipse и дополнительных инструментов для работы

Список инструментов, необходимый для работы (дополнительные инструменты будут рассмотрены в статье по ходу работы в самой IDE Eclipse, представленных четырех достаточно для базового запуска):

Java Runtime Environment. Это комплекс ПО, необходимый для запуска Java-приложений (IDE Eclipse написана на Java);

- IDE Eclipse. Выпускается множество редакций IDE (для Java-, WEB-, PHP-разработчиков, разработчиков встраиваемых систем и т.д). Каждая редакция содержит дополнительный набор компонентов для упрощения работы в определенной области: так, например, для работы с микроконтроллерами потребуется редакция для разработчиков встраиваемых систем (Eclipse IDE for Embedded C/C++ Developers), в составе данной версии уже имеются заготовки под создание проектов для архитектур ARM и RISC-V, подключаемые модули отладки (SEGGER J-Link, OpenOCD, pyocd и QEMU) и разные базовые примеры;

GNU ARM Embedded Toolchain. Это набор программ (компилятор, ассемблер, компоновщик и т.д), необходимый для разработки программ на микроконтроллерах с архитектурой ARM. Соответственно, при работе с микроконтроллером на базе другой архитектуры (например, RISC-V) потребуется другой набор инструментов;

- Build Tools. Это набор программ, который требуется для корректной работы IDE Eclipse (выполнение сборки проекта, его очистки и т.д). В состав пакета входят следующие программы: busybox, cp, echo, make, mkdir, rm и sh. Традиционно все эти инструменты доступны в ОС Linux, тем не менее, для ОС Windows существуют отдельные пакеты, например, xPack (то есть все приведенные выше программы скомпилированы для работы в ОС Windows).

Предметнее по установке каждого компонента.

Java Runtime Environment

Стандарт языка программирования Java находится под контролем компании Oracle, которая не осуществляет деятельность на территории РФ. При загрузке JRE с официального сайта Oracle жители РФ могут столкнуться с проблемами даже после прохождения регистрации на сайте, поэтому загрузку рекомендуется выполнять с их старого, но еще рабочего сайта, который выделен конкретно под язык программирования Java. Достаточно будет загрузить автономную версию (не требует интернет-подключения) для нужной разрядности ОС (например, для 64-разрядной). Установка стандартная и не должна вызвать трудностей у рядового пользователя.

IDE Eclipse

Все возможные редакции IDE Eclipse доступны для загрузки на странице официального сайта Eclipse Foundation. Необходимо загрузить версию "Eclipse IDE for Embedded C/C++ Developers" (см. рисунок 1).

Рисунок 1 - Алгоритм загрузки "Eclipse IDE for Embedded C/C++ Developers"

Для централизованной и удобной работы в будущем установку рекомендуется выполнить по пути C:\Eclipse\IDE - папка C:\Eclipse\ будет общей для всех требуемых для работы инструментов.

GNU ARM Embedded Toolchain

Набор инструментов доступен для загрузки на официальном сайте ARM. Для удобства можно загрузить установочный файл .exe для 32-разрядной ОС Windows (подходит и для 64-разрядной версии ОС), как это показано на рисунке 2.

Рисунок 2 - Алгоритм загрузки "GNU ARM Embedded Toolchain"

Установка стандартная. По аналогии с IDE Eclipse, установку рекомендуется выполнить по пути С:\Eclipse\Build

Ключевая папка с набором всех программ называется \bin и содержится она в корневом каталоге с установленным пакетом инструментов GNU ARM Embedded Toolchain - индикатором, что пользователь находится в нужной папке, будет наличие в каталоге, например, исполняемого файла arm-none-eabi-gcc.exe (компилятор GCC).

Build Tools

Набор программ доступен для загрузки из официального репозитория xPack с GitHub. Достаточно загрузить zip-архив, как это показано на рисунке 3.

Рисунок 3 - Алгоритм загрузки "Build Tools"

В составе архива все программы доступны по пути \bin.

Для удобства рекомендуется их извлечь в папку \bin с программами GNU ARM Embedded Toolchain (см. прошлый пункт, то есть программы busybox, cp, echo, make, mkdir, rm и sh должны быть в той же папке, что и arm-none-eabi-gcc.exe). 

Папка workspaces

Данный пункт подготовки окружения для работы с IDE Eclipse не является обязательным, но рекомендуем к выполнению для упорядоченной структуры работы с проектами. Суть заключается в создании папки с названием "workspaces" по пути C:\Eclipse. Внутри данной папки будут создаваться рабочие пространства для работы с различными пользовательскими проектами.

На этом установка среды завершена. 

Настройки среды и создание проекта в IDE Eclipse

Произведем запуск исполняемого файла eclipse.exe из папки с установленной IDE Eclipse. Сразу после запуска появится окно с выбором папки для рабочего пространства Вашего проекта (на самом деле в рамках рабочего пространства может быть несколько проектов, но обычно на один проект заводят одно рабочее пространство).

Создадим папку HelloWorld по пути С:\Eclipse\workspaces , как это показано на рисунке 4.

Рисунок 4 - Указание папки рабочего пространства для проекта в IDE Eclipse

После выбора папки рабочего пространства запустится сама интегрированная среда разработки. Произведем её базовую настройку.

Первостепенно необходимо перейти из верхнего бара кнопок по пути "Window > Preferences", после чего откроется окно "Preferences". В данном окне по пути MCU необходимо указать пути до ранее установленных GNU ARM Embedded Toolchain и Build Tools (отметим, что для удобства программы Build Tools были размещены в ту же папку, что и программы GNU ARM Embedded Toolchain, поэтому путь будет одинаков), как это показано на рисунке 5.

Рисунок 5 - Указание глобальных путей для GNU ARM Embedded Toolchain и Build Tools 

Из рисунка 5 также видно, что здесь же можно задать пути до набора инструментов под работу с архитектурой RISC-V (аналогичный тулчейн GNU, но для архитектуры RISC-V - используется, например, при работе с К1986ВК025).

Теперь создадим проект. Из верхнего бара кнопок среды необходимо перейти по пути "File > New > C/C+ Project". После чего выполнить последовательность действий, как на рисунке 6.

Рисунок 6 - Алгоритм создания нового проекта в IDE Eclipse

Примечание к рисунку 6: в окне с номером 2 для опции "Toolchains" необходимо выбрать именно параметр "Arm Cross GCC", поскольку сборка проекта будет выполняться для микроконтроллера К1986ВЕ92QI (построен на архитектуре ARM, ядре Cortex-M3). Факт выбора данной опции должен автоматически подключить нужный набор инструментов GNU (в соответствии с настройками, установленными на рисунке 5), однако, поскольку перезапуска IDE Eclipse после первичной настройки для сохранения всех параметров могло не быть, может появиться окно с номером 4, где среда попросит дополнительно указать адрес до инструментов разработки GNU. Здесь указывается тот же путь до GNU ARM Embedded Toolchain.

Проект создан. Если всё сделано в соответствии с рисунком шесть, то название у проекта будет "HelloWorld" (название задаётся в окне 2 рисунка 6).

Убедимся, что настройки используемого набора инструментов GNU и Build Tools для рабочего проекта применены правильно, при этом также зададим тип используемого ядра архитектуры ARM. Необходимо нажать правой кнопкой мыши (ПКМ) по названию проекта в дереве проекта "Project Explorer" (дерево проекта расположено слева), после чего перейти по пути "C/C++ Build > Settings" и выполнить/проверить настройки по рисунку 7.

Рисунок 7 - Базовые настройки проекта в IDE Eclipse

Ключевым, конечно же, является то, чтобы в окне с номером 2 для опций "Toolchain path" и "Build tools paths" были указаны верные пути до рабочих инструментов. Это гарантирует, что сборка проекта будет выполняться корректно.

Проект готов для работы. Создадим первый файл в проекте, пускай это будет заготовка для основного файла main.c. Для создания файла необходимо нажать ПКМ по названию проекта в дереве проекта, после чего перейти по пути "New > Source File", как продемонстрировано на рисунке 8. Создание файла завершается вводом его имени (в данном случае main.c) и нажатием кнопки "Finish" в открывшемся окне.

Рисунок 8 - Алгоритм создания файла main.c

Прежде чем перейти к интеграции в проект стандартных библиотек SPL, необходимо внедрить в него два базисных файла, которые и будут, фактически, задавать поддержку микроконтроллера в IDE Eclipse: это файл со сценарием компоновщика .ld и ассемблерный файл инициализации startup.s.

Поговорим о каждом файле отдельно.

Файл со сценарием компоновщика .ld

В процессе сборки проекта из исходных файлов после этапа компиляции получается набор объектных файлов. Каждый объектный файл содержит в общем виде следующие секции:

- .text - машинный код, то есть инструкции процессора;
- .data - глобальные и статические переменные;
- .rodata - аналог .data для неизменяемых данных;
- .bss - глобальные и статические переменные, которые при старте содержат нулевое значение.

Для того, чтобы получить итоговый файл с образом программы, который будет учитывать адресацию изделия (в данном случае адресное пространство микроконтроллера) и в котором произойдет слияние всех объектных файлов, должен выполниться процесс компоновки (или линковки). Компоновщик выполнит слияние объектных файлов, разместит секции по своим адресным пространствам (например, традиционно машинный код, то есть секция .text, размещается в ПЗУ, секция .data - в ОЗУ - подобные настройки как раз и задаются в сценарии линковки) и избавится от перекрестных ссылок во избежание коллизий. Больше о процессе линковки можно прочитать в статье Habr "ARM-ы для самых маленьких: тонкости компиляции и компоновщик".

Компания ARM позаботилась о том, чтобы разработчики не начинали путь разработки сценария компоновки с нуля, поэтому для каждого ядра их собственной архитектуры в рамках библиотеки CMSIS предусмотрена заготовка файла .ld - забегая вперед, и файла startup.s тоже. Заготовки рассматриваемых файлов для ядра Cortex-M3 (на уровень выше доступны заготовки и для других ядер семейства) доступны в официальном репозитории ARM на GitHub.

Загрузим оба файла "gcc_arm.ld" и "startup_ARMCM3.S" на компьютер. Для удобства переименуем их в "MDR32F9Q2I.ld" и "startup_MDR32F9Q2I.S" соответственно. Теперь добавим данные файлы в рабочий проект: для этого воспользуемся стандартным инструментом IDE Eclipse, предназначенного для импорта различных объектов. Необходимо нажать ПКМ по названию проекта в дереве проекта, после чего выбрать опцию "Import". Теперь необходимо выполнить последовательность действий, как на рисунке 9.

Рисунок 9 - Импорт файлов "MDR32F9Q2I.ld" и "startup_MDR32F9Q2I.S" в рабочий проект

Из рисунка 9 видно, что в рассматриваемом случае файлы, загруженные с репозитория ARM (которые также впоследствии были переименованы), находятся по пути C:\Users\User\Downloads

После выполнения данного действия файлы должны отобразиться в дереве проекта "Project Explorer" - их импорт выполнен успешно.

Приступим к настройке файла со сценарием компоновщика. 

В неизменном виде файл учитывает особенности используемой архитектуры (речь идёт про разного рода выравнивания данных) и имеет стандартный алгоритм расположения всех секций по адресам ПЗУ и ОЗУ. То есть, фактически, для общего случая достаточно только описать адреса ПЗУ и ОЗУ микроконтроллера в файле сценария компоновщика. Раскладка памяти микроконтроллера в файле компоновщика задаётся директивой "MEMORY", как представлено во фрагменте кода 1 (открытие файла с расширением .ld в IDE Eclipse выполняется по нажатию ПКМ на самом файле в дереве проекта, далее необходимо проследовать по пути "Open With > Text Editor"):

Фрагмент кода 1 - Настройка раскладки памяти в файле сценария компоновщика .ld
MEMORY
{
   FLASH (rx)  : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE
   RAM   (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE
}
Переменной "ORIGIN" указывается базовый адрес области памяти, а переменной "LENGTH" - её длина в байтах. Важно отметить, что определениям "__ROM_BASE", "__ROM_SIZE", "__RAM_BASE" и "__RAM_SIZE" указываются необходимые значения в других местах файла, как показано во фрагменте кода 2 (приведены сразу значения для раскладки памяти микроконтроллера К1986ВЕ92QI).

Фрагмент кода 2 - Настройка определений "__ROM_BASE", "__ROM_SIZE", "__RAM_BASE" и "__RAM_SIZE"
...
__ROM_BASE = 0x08000000;
__ROM_SIZE = 0x00020000;
...
__RAM_BASE = 0x20000000;
__RAM_SIZE = 0x00008000;
...
На этом разработка файла в рамках микроконтроллера К1986ВЕ92QI завершена.

Дополнительные сведения по разработке файла со сценарием компоновщика .ld:

- Пользователю может потребоваться выполнить запуск программы из ОЗУ микроконтроллера. В таком случае для определений "__ROM_BASE" и "__ROM_SIZE" необходимо указать адреса ОЗУ (без перекрытий адресации, которая задаётся определениями "__RAM_BASE" и "__RAM_SIZE");

- Некоторые микроконтроллеры могут не обладать жесткой раскладкой памяти, которая состоит только из одной области ПЗУ и одной области ОЗУ. Например, микроконтроллер К1986ВЕ1QI имеет память ОЗУ, разбитую на две части: здесь важно отметить то, что только из одной области ОЗУ может исполняться код, поэтому сценарий компоновки для программы (или куска кода), исполнение которой должно быть выполнено из ОЗУ, должен это учитывать (в данном случае размещение секции .text должно производиться строго в область памяти, которая доступна для исполнения кода, поскольку это машинные инструкции). Соответственно, в директиве "MEMORY" должна быть введена дополнительная область памяти, а по ходу стандартной заготовки для работы можно раскомментировать куски кода, которые отведены под выделение дополнительных секций (ARM позаботились и оставили возможность внедрить дополнительную секцию .data и .bss);

- В файле .ld также настраивается механизм работы со стеком и кучей (алгоритм заполнения и размеры).

Осталось только подключить разработанный файл со сценарием компоновки к рабочему проекту. Для этого необходимо зайти в настройки проекта (нажатие ПКМ по названию проекта, после чего перейти в "Properties") и следовать рекомендациям, приведенным на рисунке 10:

Рисунок 10 - Алгоритм подключения файла со сценарием компоновщика к проекту

Из рисунка 10 видно, что настройка выполняется в рамках инструмента "GNU Arm Cross C Linker".
Здесь же для инструмента "GNU Arm Cross C Linker" необходимо перейти во вкладку "Miscellaneous" и поставить галочку на пункте "Do not use syscalls (--specs=nosys.specs)". Это связано с тем, что при сборке проекта может возникнуть ошибка "error: ld returned 1 exit status": выставленная опция предотвращает её появление, при этом не влияет на сборку проекта.

Файл инициализации startup.s

Это ассемблерный файл (на практике данный файл может быть и с расширением , но наиболее распространен вариант с использованием ассемблера), требуемый для инициализации системы. Описывает стандартные вектора прерываний (включая вектор Reset_Handler, с которого стартует исполнение программы) ядра, а также все внешние вектора прерываний, которые подключены разработчиками со стороны периферийных блоков микроконтроллера. Здесь же могут быть описаны функции-обработчики для всех прерываний: чаще всего для внешних прерываний прописываются некоторые функции-заглушки (такая реализация в том числе в стандартной заготовке от ARM через команду "B ."), чтобы пользователь смог переопределить нужный обработчик в своём Си-коде, не заботясь о реализации алгоритма на ассемблере.

Официально ассемблерные файлы инициализации startup.s предоставляются для IDE Keil и IAR в составе библиотеки SPL. Как IDE Keil, так и IDE IAR имеют свой набор инструментов для сборки - ассемблер в том числе отличается от инструментов GNU, поэтому файлы не будут совместимы, потребуется доработка стандартной заготовки от ARM. Вся суть доработки будет заключаться во внедрении списка внешних векторов прерываний по правилам ассемблера GNU, потому что всё остальное по базовой инициализации микроконтроллера описано ARM правильно (для этого будет достаточно взять файл инициализации нужного микроконтроллера из SPL либо для IDE Keil, либо для IDE IAR, и перенести список внешних векторов прерываний).

С результатами такой доработки в рамках микроконтроллера К1986ВЕ92QI можно ознакомиться из финального проекта, который приложен к данной статье.

Разработка основных файлов поддержки микроконтроллера при работе с IDE Eclipse рассмотрена - проект можно считать созданным и настроенным к работе на микроконтроллере. Перейдем к интеграции стандартных библиотек SPL в проект.

Интеграция библиотек SPL в проект

Библиотеки SPL доступны для загрузки на официальном сайте компании Миландр. Загрузим архив и распакуем его для удобства по следующему пути: C:\Eclipse\SPL.

Для иерархической структуры проекта добавим в него папки с именами "inc" и "src". Добавление папок в проект выполняется по аналогии с алгоритмом, по которому в проект добавлялся файл main.c, однако, в меню "New" необходимо выбрать пункт "Folder".

Инструментом импорта по аналогии с алгоритмом, приведенным на рисунке 9, необходимо добавить в проект из SPL следующие файлы (файлы с расширением .h необходимо импортировать в папку "inc" проекта, а файлы с расширением .c - в папку "src"):

1. Файлы поддержки ядра: core_cm3.h, core_cmFunc.h и core_cmInstr.h - расположены по пути C:\Eclipse\SPL\Libraries\CMSIS\MDR32FxQI\CoreSupport\CM3 ;

2. Общий заголовочный файл на микроконтроллер MDR32F9Q2I.h - расположен по пути C:\Eclipse\SPL\Libraries\CMSIS\MDR32FxQI\DeviceSupport\MDR32F9Q2I\inc ;

3. Системные вспомогательные файлы инициализации микроконтроллера system_MDR32F9Q2I.c и system_MDR32F9Q2I.h - расположены по пути C:\Eclipse\SPL\Libraries\CMSIS\MDR32FxQI\DeviceSupport\MDR32F9Q2I\startup ;

4. Конфигурационный файл с различными обязательными определениями для работы SPL (какой используется микроконтроллер, частоты тактирования, параметризация различных периферийных блоков) MDR32FxQI_config.h - расположен по пути C:\Eclipse\SPL\Libraries\SPL\MDR32FxQI

Здесь сразу отметим, что для правильной работы библиотек SPL внутри файла MDR32FxQI_config.h необходимо раскомментировать строчку с определением используемого микроконтроллера, в случае с К1986ВЕ92QI это строчка кода #define USE_MDR32F9Q2I;

5. Необходимые библиотечные файлы по работе с периферийными блоками, которые расположены по путям C:\Eclipse\SPL\Libraries\SPL\MDR32FxQI\src и C:\Eclipse\SPL\Libraries\SPL\MDR32FxQI\inc - в финальный проект, который доступен для загрузки после статьи, добавлены библиотеки по работе со всей периферией.

Здесь важно отметить, что файлы для нужного микроконтроллера из папки "IRQ_Handler_Template" добавлять необязательно: это файлы, содержащие переопределения тех самых функций-обработчиков внешних прерываний (о них шла речь при описании файла инициализации startup.s) - переопределения для любых обработчиков можно выполнить в любой части Вашего кода.

Файл MDR32FxQI_eeprom_cache.S добавлять в проект не следует, поскольку он не совместим с ассемблером GNU.

Требуемые доработки

Если в проект будут добавлены библиотечные файлы по работе с периферийными блоками DMA и EEPROM, то внутри них (внутри файла MDR32FxQI_dma.c и файла MDR32FxQI_eeprom.h) необходимо описать дополнительное ветвление для компилятора GNU GCC "__GNUC__", взяв за основу определения для компилятора "__ARMCC_VERSION" по части как управляющих структур для DMA, так и определения "__RAMFUNC".

Интеграция библиотек SPL в проект завершена. Теперь укажем компилятору в настройках проекта пути до include-файлов (вспоминаем, что для удобства все .h файлы были добавлены в папку "inc"), как это показано на рисунке 11 (ПКМ по названию проекта и переход в "Properties"):

Рисунок 11 - Алгоритм указания компилятору путей до заголовочных файлов

Обратите, пожалуйста, внимание, что на рисунке 11 указан также путь до подпапки /USB_Library, поскольку из библиотек SPL была импортирована целая папка, которая содержит дополнительную папку с библиотеками для блока USB.

В конечном счете дерево проекта должно выглядеть аналогичным образом, как на рисунке 12:

Рисунок 12 - Дерево проекта после добавления всех необходимых файлов для работы

Сборка проекта

Вспомним, что основной файл для кода программы main.c не заполнен.

Можно взять любой пример из библиотеки SPL по пути С:\Eclipse\SPL\Examples\MDR32F9Q2I (не забыв при этом добавить все необходимые библиотечные файлы, описанные в файле readme.txt из состава примера), однако, для упрощения воспользуемся стандартным кодом "Hello World" из базовой статьи информационного портала отдела технической поддержки компании Миландр.

После добавления кода примера в файл main.c остаётся только выполнить сборку проекта нажатием кнопки с молоточком из верхнего бара интегрированной среды разработки, как это показано на рисунке 13. При этом во вкладке "Console" после сборки должны появиться её результаты, в нашем случае сборка выполнилась без ошибок, на выходе получился файл HelloWorld.elf.

Рисунок 13 - Сборка проекта

Сборка проекта выполнена. Осталось рассмотреть вопрос отладки полученного образа программы на самом микроконтроллере.

Отладка проекта

В ходе сборки проекта был получен итоговый образ программы HelloWorld.elf. Выполним загрузку данного образа в микроконтроллер и произведем его отладку. В рамках данного подраздела будут рассмотрены отладочные сессии "GDB OpenOCD Debugging" с использованием OpenOCD и "GDB SEGGER J-Link Debugging" с использованием утилит от Segger для фирменного программатора J-Link.

GDB OpenOCD Debugging

OpenOCD - это ПО с открытым исходным кодом для программирования и отладки различных микросхем. Программа реализует транспортный уровень доступа к микросхемам, вводя поддержку различных программаторов-отладчиков (J-Link, ST-Link, CMSIS-DAP, FTDI и др.), а также различного рода конфигурационных файлов для поддержки большого числа микросхем сторонних производителей.

В рамках статьи информационного портала уже был затронут вопрос компиляции OpenOCD из исходных файлов, поэтому это можно сделать либо самостоятельно (в случае работы на ОС Windows потребуется кросс-платформенная компиляция с использованием MinGW), либо скачать уже скомпилированный вариант с официального сайта с инструментарием GNU.

Скачаем готовый архив и распакуем его по пути C:\Eclipse\OpenOCD. Исполняемый файл openocd.exe расположен в папке "bin". Фактически, для работы OpenOCD должен быть запущен исполняемый файл с набором конфигурационных файлов (которые описывают тип подключенного программатора-отладчика и сам микроконтроллер). Данный механизм запуска описан в отдельной статье информационного портала - настоятельно рекомендуем ознакомиться

При работе с IDE Eclipse будут проводиться аналогичные действия, только все указания на запуск OpenOCD будут заполняться в самой среде. Приступим.

Необходимо найти в верхнем баре среды значок "зеленого жука" и в стрелочке выбрать "Debug Configuration". Откроется окно, как на рисунке 14. 

Рисунок 14 - Создание отладочной сессии GDB OpenOCD Debugging

В соответствии с указаниями из рисунка 14 в самом начале необходимо создать отладочную сессию "GDB OpenOCD Debugging", после чего необходимо перейти во вкладку "Debugger" открывшегося окна и указать путь до исполняемого файла openocd.exe. Здесь же для окна "Config options" необходимо прописать все опции запуска OpenOCD: в моем случае использовался программатор ST-LINK/V2 (может использоваться в связке с К1986ВЕ92QI), поэтому подключается соответствующий файл stlink.cfg

Здесь важно отметить, что во вкладке "Startup" окна "Debug Configuration" имеется опция "Debug in RAM", которая может быть выставлена в случае отладки проекта из ОЗУ (как ранее и сообщалось, для этого файл со сценарием компоновки должен быть изменен).

Во вкладке "SVD Path", как указано на рисунке 14, задаётся путь до файла с расширением .svd, который позволяет просматривать состояние регистров периферийных блоков в ходе отладочной сессии. Данные файлы для микроконтроллеров имеются в составе SPL, в данном случае найти их можно по пути C:\Eclipse\SPL\SVD\MDR32FxQI - файл MDR32F9Q2I.svd.

Настройка отладочной сессии с применением OpenOCD выполнена. Применим все настройки кнопкой "Apply" и сразу же нажмем кнопку "Debug". После нажатия кнопки начнется загрузка итогового образа программы в микроконтроллер (соответственно, микроконтроллер должен быть запущен, а программатор-отладчик подключен к плате), а затем запустится процесс отладки, как это показано на рисунке 15.

Рисунок 15 - Вид исполнения отладочной сессии в IDE Eclipse

На этом настройка отладочной сессии с применением OpenOCD завершена.

Обратите, пожалуйста, внимание, что для использования программатора J-Link в такой системе потребуется его перепрошивка на драйвера "WinUSB" с использованием Zadig, что детально описано в рамках статьи создания проекта в IDE Eclipse для К1986ВК025. Чтобы использовать программатор J-Link с его родным ПО, доступен вариант выполнения отладки с использованием GDB-сервера из программного комплекса от Segger. Рассмотрим вариант такого применения.

GDB SEGGER J-Link Debugging

Компания Segger, которая является разработчиком программаторов J-Link, выпускает набор программ, предназначенных для работы с их изделиями. В рамках одной из статей информационного портала ранее рассматривался вопрос тестирования устройства с применением одной из стандартных утилит от Segger. В состав этих программ также входит так называемый GDB-сервер, который реализует транспортный уровень для выполнения опций отладки микроконтроллеров - в IDE Eclipse интегрирован набор инструментов для работы с этим GDB-сервером, поэтому такой вариант может стать альтернативой OpenOCD при условии, что используется программатор J-Link (другой программатор использовать не удастся).

Загрузить набор программ от Segger можно с их официального сайта. Доступен вариант загрузки инструментов в том числе для ОС Linux, но мы выполним загрузку для 64-разрядной ОС Windows, как это показано на рисунке 16 (при необходимости принять все соглашения для доступа к скачиванию файла).

Рисунок 16 - Загрузка программного комплекса от Segger для работы с программатором J-Link

Для удобства установку произведем по пути C:\Eclipse\Segger . Прежде чем перейти к рассмотрению запуска отладочной сессии, необходимо внедрить поддержку микроконтроллера К1986ВЕ92QI в программный комплекс от Segger, для этого в рамках информационного портала отдела технической поддержки имеется отдельная статья - обратите, пожалуйста, внимание, что в новых версиях набора программ от Segger изменился подход к добавлению поддержки пользовательских микроконтроллеров, что также отражено в приведенной статье.

После добавления поддержки микроконтроллера необходимо создать отладочную сессию по аналогии с тем, как это делалось с OpenOCD, однако, на этот раз необходимо выбрать "GDB SEGGER J-Link Debugging", как это показано на рисунке 17. После создания сессии необходимо перейти во вкладку "Debugger" и в поле "Executable path" указать путь до программы "JLinkGDBServerCL.exe". В этом же окне потребуется заполнить поле "Device name" именем используемого микроконтроллера (соответственно, берется название из файла с расширением .xml, когда выполнялось добавление поддержки микроконтроллера в программный комплекс от Segger). Вариативно можно изменять тип отладочного интерфейса JTAG или SWD, а также его скорость.

Рисунок 17 - Настройка отладочной сессии GDB SEGGER J-Link Debugging
Из рисунка 17 также следует, что важны настройки для окна "Commands" из раздела "GDB Client Setup". Действительно, команды "target remote localhost:2331" и "monitor flash erase" позволяют в момент подключения GDB-клиента к серверу выполнить стирание микросхемы, поскольку в отсутствие данных настроек силами утилит от Segger выполняется только программирование микросхемы, то есть этап со стиранием пропускается. Это, в свою очередь, приводит к тому, что модифицированный код в отсутствие данных команд будет записан во Flash-памяти поверх старого - корректное исполнение нового кода становится невозможным.
На этом настройка отладочной сессии закончена (при необходимости также можно подключить файл с расширением .svd для возможности просмотра состояния регистров периферийных блоков в режиме отладки).

Запуск аналогичен запуску отладочной сессии с OpenOCD.

Сохранить статью в PDF

Файлы для скачивания

Теги

Была ли статья полезной?