Разработанный код не всегда выполняется корректно, в таких случаях бывает полезно просмотреть содержимое внутренних регистров микроконтроллера, подключив к нему адаптер JTAG.

Для того, чтобы пользоваться отладкой в интегрированной среде разработки Eclipse, необходимо установить плагин для отладки. В качестве такового будем использовать Zylincdt Plug-in.

Для того, чтобы его загрузить с сети интернет, необходимо запустить Eclipse и выбрать в меню «Help» пункт «Install New Software…» .Далее в окне «Install» нажать на кнопку «Add…» . В окне «Add site» Вам будет предложено ввести имя и расположение плагина, как показано на рисунке

Надпись «Duplicate location» у меня появилась в связи с тем, что плагин был ранее уже установлен мною.

Далее необходимо нажать на кнопку «OK» и приступить к установке плагина



Если Ваш компьютер «ходит» в интернет через прокси-сервер, то придется еще дополнительно настроить в Eclipse использование прокси.

Для этого войдите в меню «Windows -> Preferences» и в открывшемся окне «Preferences» выберите «General -> Network connections»

В выпадающем списке «Active Provider» выбираем «Manual» и для схем «HTTP» и «HTTPS» жмем на кнопку «Edit», после чего выбираем IP-адрес и порт прокси-сервера. Если Вы не знаете адрес и порт прокси, то эти настройки можно подсмотреть в Вашем интернет-браузере, используемом на компьютере с доступом в интернет через прокси-сервер или спросить у системного администратора.



Жмем кнопку «Apply» , потом «ОК» и выполняем вышеописанную процедуру установки плагина.

Для более ясного представления процесса отладки в Eclipse я нарисовал схему взаимодействия всех участвующих в отладке элементов

Из схемы видно, что физический ( или аппаратный ) интерфейс состоит из двух кабельных соединений:

1.USB-кабель между персональным компьютером ( PC ) и  адаптером JTAG

2.JTAG-кабель IDC20 — IDC20 между адаптером и целевой платой

На персональном компьютере  запускается программный сервер ( утилита ) openocd  при подключенном JTAG -адаптере и целевой плате. Openocd  через драйвер адаптера взаимодействует с ним и кроме отладки также поддерживает режим программирования Flash-памяти целевого микроконтроллера.

Openocd имеет интерфейс командной строки.

Запущенный программный gdb-сервер под названием openocd ожидает подключения программного gdb- клиента, который в нашем случае( при использовании Sourcery G++ ) именуется как arm-none-eabi-gdb.

Интерфейс между клиентом и сервером реализован на основе TCP/IP- сокетов, поэтому подключенный адаптер и запущенная Eclipse могут находиться как на одной, так и на разных машинах.

Плагин ZylinCDT обеспечивает графическое отображение в окне Eclipse полученной от адаптера отладочной информации.

Процесс отладки можно также выполнять в консольном режиме, используя командную строку вместо IDE Eclipse.

Такой способ отладки используют настоящие компьютерные ГУРУ .

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

Стоит отметить, что программный отладчик openocd распространяется в исходном коде, поэтому скомпилировать его можно самостоятельно. В операционных системах семейства Linux именно так это и делается. Для установки openocd на windows- машину можно воспользоваться готовым установочным пакетом, например openocd 0.4.0 ( скачать ).

Openocd версии 0.4.0 для работы с FT2232 JTAG адаптером использует библиотеку libusb, поэтому для нашего адаптера FTDI_JTAG необходимо переустановить драйвер канала A ( к которому подсоединен JTAG интерфейс ).

Для этого кликните правой клавишей мышки на иконке «Мой компьютер» ( только не на ярлыке ) и войдя в свойства системы на вкладке «Оборудование» выберите «Диспетчер устройств»

В диспетчере устройств открываем «Контроллеры универсальной последовательной шины USB» и выбираем «USB Serial converter A».

Обратите внимание, что адаптер в этот момент должен быть подключен к компьютеру, иначе в списке USB-устройств его не будет.



Тепер настало время установить новый драйвер , использующий библиотеку libusb. Для этого зайдите в каталог установленной openocd и распакуйте архив с драйверами из подкаталога «drivers».

Далее следует стандартная процедура установки драйверов в Windows



После установки драйвера в списке диспетчера устройств появиться дополнительный раздел под названием « libusb-win32-devices»



Теперь, когда драйвера успешно установлены, можно подключить ftdi jtag — адаптер к компьютеру и проверить его работу с помощью openocd.

Вспомним схему отладки, нарисованную мною выше.  Важно понимать , что EclipseCDT и ZylinCDT лишь предоставляют интерфейс пользователю, реальная отладка происходит благодаря связке JTAG — OpenOCD — arm-none-eabi-gdb.

Программный сервер OpenOCD имеет интерфейс командной строки и предоставляет пользователю необходимые команды, в том числе для программирования Flash-памяти микроконтроллера.

Таким образом «прошить» микроконтроллер можно командами OpenOCD, не запуская отладку в Eclipse.

Для проверки работоспособности адаптера запустим командный интерпретатор через «Пуск-> Выполнить … », далее набираем команду « cmd» и жмем клавишу «OK».

Подключаем FTDI JTAG к компьютеру, зеленый светодиод возле разъема USB-порта адаптера должен засветиться, что свидетельствует о присутствии напряжения +5В на плате адаптера.

В командной строке необходимо набрать следующую команду

openocd -f interface/ftdi_jtag.cfg

Но прежде необходимо скопировать файл ftdi_jtag.cfg в каталог «interface» в подкаталогах openOCD.

Содержимое файла ftdi_jtag.cfg следующее

interface ft2232

ft2232_device_desc «USB <-> Serial Cable A»

ft2232_layout usbjtag

ft2232_vid_pid 0x0403 0x6010

В результате в окне интерпретатора Вы увидите сообщение с заголовками «Warn» , «Info», «Error», которое свидетельствует о том, что адаптер подключен и найден конфигурационный файл ftdi_jtag.cfg .

В противном случае будет выведено одно из сообщений

Error: unable to open ftdi device: device not found

Если не обнаружен адаптер , или же в случае отсутствия ftdi_jtag.cfg, будет выведено сообщение

Can’t find ftdi_jtag.cfg

Следующим шагом станет присоединение целевого устройства. В качестве такового будем использовать одну из плат на основе микроконтроллера с ядром Cortex-M3 из семейства STM32.

В продаже имеется недорогая плата от компании Olimex STM32-H103 или же еще более дешевый ее аналог STM32F103-HB от BRAVEKIT .

Также возможно изготовить макетную плату на основе одного из представителей семейства STM32 самостоятельно.

Аналогичным описанному ранее образом вводим в командной строке

openocd -f interface/ftdi_jtag.cfg -f target/stm32.cfg

В отличии от файла ftdi_jtag.cfg второй конфигурационный файл stm32.cfg не нужно никуда копировать, поскольку он уже находиться в подкаталоге «target» основного каталога openocd.

Я использую в своих экспериментах плату STM32F103-HB.

Чтобы сократить длину команды вызова OpenOCD, можно дописать в файл ftdi_jtag.cfg еще одну строчку

source [ find target/stm32.cfg ]

Вызов команды запуска OpenOCD будет выглядеть так:

openocd -f interface/ftdi_jtag.cfg

В результате выполнения этой команды произойдет запуск gdb-сервера OpenOCD.

Поскольку используемая мною плата STM32F103-HB является аналогом платки STM32-H103 от Olimex, то пример проекта под Eclipse можно взять с сайта Olimex.

Распаковав архив заходим в подкаталог «stm-h103» и копируем с него файл «main.out» куда-нибудь неглубоко, например ( как у меня ) в H:\ARM\main.out.

Хочу отметить, что новая платка STM32F103-HB уже прошита примером от Olimex для stm32-h103.

Теперь необходимо запустить gdb-клиента под названием arm-none-eabi-gdb. Для этого откроем еще одно окно командного интерпретатора в Windows и введем в командной строке

arm-none-eabi-gdb H:\ARM\main.out

В результате проведенных манипуляций в окне интерпретатора появится приглашение для ввода команд «<gdb>»

Теперь уделим немного внимания теории происходящего. Запущенный ранее сервер в лице openocd ожидает входящего соединения по протоколу TCP/IP , прослушивая порт номер 3333. Запустив клиента arm-none-eabi-gdb мы еще не установили соединение с openocd, для этого нам необходимо ввести в командной строке «<gdb>» следующую команду

<gdb> target remote localhost:3333

Запись «localhost:3333» указывает IP-адрес и номер порта для соединения .

Соединение с OpenOCD установлено, но наша прошивка все еще не загружена . Для загрузки прошивки необходимо сначала выполнить команду останова процессора ( обратите внимание, что перед всеми командами openocd используется «monitor»).

<gdb> monitor soft_reset_halt

Останов процессора визуально можно определить по состоянию зеленого светодиода «STAT» на плате STM32F103-HB, он перестанет мерцать.

Следующей последовательностью команд мы загрузим прошивку, установим точку останова на входе в функцию «main» и запустим только что загруженную прошивку на выполнение.

Первая команда загружает прошивку во FLASH-память микроконтроллера. Поскольку в память нашего контроллера уже загружена прошивка, то можно не выполнять загрузку

<gdb> monitor flash write_image erase unlock H:/ARM/main.out 0x08000000 elf

После загрузки прошивки необходимо выполнить аппаратный сброс процессора, для этого нужно нажать на клавишу «RESET», после чего светодиод «STAT» снова заморгает.

Снова выполним останов процессора.

<gdb> monitor soft_reset_halt

Далее назначим точку останова на входе в функцию main и запустим программу на выполнение, таким образом код выполниться до точки входа в main.

<gdb> break main

<gdb> continue

Теперь можно просматривать содержимое памяти контроллера, выполнять код по шагам

<gdb> step

Целью такого детального описания работы отладчика является отнюдь не пропаганда использования командной строки при отладке ( хотя, как вариант ).

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

Настало время вернуться к настройке интегрированной среды разработки Eclipse CDT для использования отладки.

Копируем каталог проекта stm_h103 от Olimex в рабочее пространство Eclipse и при запуске указываем этот каталог.

Далее выбираем «File -> Import» и в открывшемся окне «Import» на вкладке «General» указываем «Existing Projects info Workspace» .

Жмем «Next» и далее выбираем размещение импортируемого проекта

После нажатия на клавишу «Finish» проект появиться в окне «Project Explorer»

Сначала необходимо выполнить настройку параметров openocd. Этого можно и не делать, но тогда придется всякий раз запускать openocd вручную из командного интерпретатора.

Для этого выбираем в главном меню «Run -> External Tools -> External Tools Configurations… » или же нажимаем на кнопку «External Tools».

В открывшемся окне жмем на кнопку «New launch configuration» , выбираем название конфигурации «openocd_conf» и заполняем остальные поля как на рисунке

Файл ftdi_jtag.cfg должен находиться в каталоге проекта.

На вкладке «Common» устанавливаем галочку «External Tools».

В заключении конфигурации нажимаем на кнопки «Apply» и «Close ».

Теперь в разделе «External Tools » появиться новая конфигурация под названием «openocd_conf» и вместо запуска из командной строки openocd будет достаточно нажать на «openocd_conf» в разделе меню «Run -> External Tools » .

Теперь необходимо выполнить конфигурацию клиентской части gdb-отладчика. Для этого выбираем в меню «Run -> Debug Configuration » , далее в окне конфигурации выбираем «Zylin Embedded debug( Native )» и создаем новую конфигурацию отладки под названием «gdb_conf»

На вкладке «Debugger» в строке «GDB debugger» необходимо указать размещение исполняемого файла отладчика arm-none-eabi-gdb.exe.

Содержимое строки «GDB Command file» необходимо удалить.

Вкладку «Commands» необходимо заполнить так, как показано на следующем рисунке

На вкладке «Common» установить галочку напротив «Debug»

Теперь можно смело запускать отладку, выбрав конфигурацию «gdb_conf».


Viewed 19780 times by 5252 viewers

Last modified: 06/02/2020

Author

Comments

Как сделать удобочитаемым то,что появляется в меню Console?Или все так и задумано?

Убрать галочку напротив Verbose console mode на вкладке Debugger в Debug Configurations

Comments are closed.