OpenOCD: отладка кода в IAR Embedded Workbench Печать
Добавил(а) microsin   

Здесь приводится простое руководство по запуску JTAG-отладки с использованием сервера OpenOCD (перевод документации с сайта Olimex) в среде IAR. Достоинства OpenOCD в том, что этот пакет бесплатен, и позволяет использовать в качестве аппаратного отладчика множество различных недорогих адаптеров (особенно интересны среди них те, которые имеют интерфейс USB). Недостатки - как у всех открытых систем - сложность в установке и настройке, неустойчивая работа с некоторыми чипами и интерфейсами JTAG.

[Установка драйвера]

Пожалуй, эта самая сложная часть из всей процедуры запуска отладки на OpenOCD. Необходимо, чтобы не только операционная система видела Ваш JTAG-адаптер, но и еще сервер OpenOCD мог обмениваться с ним данными.

При установке драйвера внимательно прочитайте документацию к своему JTAG-адаптеру, а также документацию по установке драйвера, которая имеется в самой OpenOCD (см. [2], файл "openocd-0.7.0\drivers\libusb-1.0 drivers.txt"). Пошаговый пример подключения адаптера opendous-jtag см. в [3].

[IAR C-SPY GDB Server Driver]

С использованием драйвера сервера GDB от IAR, отладчик C-SPY может подключаться к имеющемуся программному инструментарию JTAG, рассчитанному на совместную работу с сервером GDB. В настоящий момент таким инструментарием является OpenOCD. Интерфейс JTAG [4] является стандартным интерфейсом, предназначенным для отладки программы прямо на чипе (on-chip debug). Такой интерфейс имеется на большинстве современных микроконтроллеров, и обычно это процессоры ARM. Отладчик C-SPY обращается к драйверу сервера GDB C-SPY (C-SPY GDB Server driver), и тот в свою очередь обращается к серверу GDB (GDB Server) через сетевое соединение Ethernet\TCP, и сервер GDB в свою очередь обменивается данными с интерфейсом JTAG (JTAG interface) обычно через подключение по USB. Наконец, интерфейс JTAG обменивается напрямую данными с отлаживаемым микроконтроллером через соединение JTAG [4].

C-SPY-GDB-Server-communication

На рисунке в качестве примеров показаны интерфейсы JTAG от Olimex, однако имеется множество других интерфейсов JTAG от других производителей, и самодельных (как например [3]; очень популярны также адаптеры на основе чипа FT2232H).

[Конфигурирование сервера OpenOCD]

Исполняемый файл на платформе Windows обычно носит имя наподобие:

%ProgramFiles%\openocd-0.7.0\bin\openocd-0.7.0.exe
или
%ProgramFiles%\openocd-0.7.0\bin-x64\openocd-x64-0.7.0.exe (если операционная система у Вас 64-битная).

Имейте в виду, что это исполняемый файл, уже готовый к запуску, и не нужна никакая процедура инсталляции! Нужно просто скопировать папку openocd-0.7.0 со всем содержимым в папку %ProgramFiles%, и процедуру инсталляции OpenOCD можно считать законченной.

Однако это далеко еще не все. Сервер OpenOCD для запуска требует некоего конфигурационного файла. Конфигурационный файл по умолчанию - 'openocd.cnf', и он уже имеется в папке со скриптами OpenOCD, так что если вы запустите openocd-0.7.0.exe без каких-либо опций, то будет использоваться именно этот файл. Обычным решением является замена пути поиска конфигурационного файла, и предоставление одного или большего количества конфигурационных файлов с разными именами, отражающих реальную специфику проекта и среды отладки. Для удобства файлы конфигурации условно делят на 2 типа - один отвечает за конфигурирование используемого интерфейса JTAG (примеры файлов конфигураций для интерфейсов JTAG находятся в папке scripts\interface каталога установки OpenOCD), и другие конфигурируют отлаживаемый процессор (target processor, примеры файлов конфигураций для интерфейсов JTAG находятся в папке scripts\target каталога установки OpenOCD).

Хватит длинных рассуждений: для старта сервера откройте консоль и перейдите в папку с исполняемым файлом (например openocd-0.7.0\bin). Предположим, что у Вас имеется JTAG-адаптер opendous-jtag [3], и Вы отлаживаете процессор LPC2124, тогда введите в консоли:

> openocd-0.7.0.exe -f interface\opendous.cfg -f target\lpc2124.cfg

Запустится сервер OpenOCD, и Вы увидите окно с сообщениями наподобие следующего:

OpenOCD-server-started

В нашем примере команда -f прямо указала те конфигурационные файлы, которые нужно использовать для старта сессии отладки. Первый из них указал, что используется JTAG интерфейс opendous, а второй указал на использование отлаживаемого процессора LPC2124.

Иногда Вам может не повезти, если не найдете готовый файл конфигурации в папках interface и target, которые соответствуют Вашему интерфейсу и отлаживаемому целевому процессору (весьма маловероятный случай, но все же не исключено). В таком случае Вам придется написать такие конфигурационные файлы самостоятельно, используя готовые конфигурационные файлы в качестве рабочего примера - те, которые больше всего соответствуют Вашей аппаратуре. Обратитесь к руководству пользователя OpenOCD [1], где подробно описываются различные секции файла конфигурации, и команды. И конечно Вам необходим даташит на целевой процессор (target device), и немного терпения, чтобы найти подходящее рабочее решение.

[Конфигурирование IAR IDE]

Когда у Вас запущен сервер OpenOCD, то Вам еще нужно немного сконфигурировать проект IAR, чтобы отладка стала возможна.

1. Запустите IAR IDE, и откройте Ваш проект, где пишете программу для целевого процессора (target; эту программу Вы хотите отладить с помощью OpenOCD). Можно также открыть готовый проект из примеров через меню Help -> Information Center -> Example projects.

2. Скомпилируйте проект, убедитесь при этом, что не было ошибок (желательно, чтобы не было и предупреждений, но это не обязательно).

3. Откройте свойства проекта через меню Project -> Options..., и перейдите в раздел Debugger. Выберите драйвер отладчика GDB Server.

IAR-project-options-select-GDB-Server

4. Перейдите в раздел Debugger -> GDB Server, и настройте адрес и порт сервера GDB. Если сервер OpenOCD запущен на том же самом компьютере, что и IAR, то в качестве адреса можете использовать условное имя localhost (или специальный адрес 127.0.0.1). В качестве порта укажите 6666. Для того, чтобы отделить адрес сервера от номера порта, используйте запятую и пробел.

IAR-project-options-GDB-Server-address-port

5. Запустите сессию отладки (через меню Project -> Download and Debug), и кликните на кнопку Run, когда загрузка кода завершится. Если все хорошо, то Вы должны быть в состоянии использовать точки останова, пошаговое выполнение и все другие возможности отладки, которые предоставляет IAR.

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

[Ссылки]

1. OpenOCD: руководство пользователя, начало.
2. openocd-0.7.0.zip - исполняемый код OpenOCD, скрипты, документация, драйверы, установщик драйвера zadig.exe.
3. AVR-USB162: самодельный JTAG-адаптер opendous.
4. Цоколевка интерфейсов JTAG.