Главная » Статьи » Xilinx » Xilinx SDK

Сохранение содержимого TCF-консоли

   Проектируя процессорные и софт-процессорные системы, инженеры часто используют стандартную консоль Xilinx SDK для отладки и вывода нужной информации, используя printf() или xil_printf() функции и JTAG-UART опцию MicroBlaze Debug Module (MDM). В Xilinx SDK разработчику доступны несколько вариантов отладки: используя GDB и System Debugger с возможностью отладки в QEMU или непосредственно в железе (рис. 1).

Рис. 1 Доступные варианты отладки для MicroBlaze

 

   Основным недостатком GDB при отладке MicroBlaze является его медлительность. Порой приходится ждать по несколько секунд, прежде чем будет возможно перейти к следующей инструкции. Вывод отчётов в консоль также занимает времени гораздо больше, чем при использовании System Debugger. Это было проверено автором в проекте, в котором необходимо было выводить более 16000 сообщений в консоль, что занимало порядка 4 часов времени. Процесс был итерационным, и в общей сложности приходилось тратить уйму времени, что бы получить необходимые данные. Однако отчёт из консоли без проблем переносился в файл путём простого копирования. Кто-то может сказать, что можно было бы использовать uart модуль … к сожалению конфигурация платы такой возможности не предоставляла, поэтому для отладки, мониторинга и сбора статистики использовался JTAG-UART.

   Однажды кто-то сказал «Почему ты не используешь System Debugger?». Действительно, почему бы не попробовать. Настроил System Debugger, запустил. О чудо, работает гораздо быстрее. Отчёты в консоль посыпались с немыслимой скоростью. Но радость была преждевременной. Вместо простой консоли открывалась TCF консоль, из которой нельзя ни чего скопировать и даже выделить всё, нажав ctrl+A. После долгого недоумения, сел искать решение проблемы.

   Решение было найдено в XSDB консоли и нескольких командах. Сразу стоит отметить, что информация по используемым командам может быть найдена во встроенной справке SDK (рис.2), здесь же приведён и ряд других команд, которые могут оказаться для Вас полезными.

Рис.2 Путь к используемым командам в справке SDK

   Как видите, существует всего две команды: jtagterminal и readjtaguart. Разберём, как их запускать из консоли XSDB. Общим для обоих вариантов является то, что нужен проект и System Debugger.

   Предположим, что имеется простая процессорная система (рис. 3), в которой имеется JTAG-UART адаптер, включённый в MDM.

Рис. 3 Процессорная система, используемая в примере

   В SDK есть простой проект, который только выводит переменную цикла в консоль (рис. 4). Наша задача – сохранить содержимое консоли в файл, используя при отладке System Debugger.

Рис. 4 Код программы

   Сделать это можно двумя способами (копировать из TCF консоли нельзя).

 

   Решение 1: запуск терминала JTAG

   После запуска отладки нужна сама XSDB консоль. Если после запуска она не появилась, то можно открыть её вручную (рис. 5).

         

Рис.5. Место расположения вызова XSDB консоли

   Для того, что бы нам считать данные из MDM (он же отладчик в котором есть JTAG-UART) нужно сначала указать терминалу, откуда брать информацию. Если этого не сделать и напрямую написать команду на открытие терминала, то будет сообщение об ошибке (рис.6).

Рис.6 Ошибка открытия терминала JTAG, т.к. текущий target (устройство) это не поддерживает (см. далее)

   Нам необходимо установить как target MDM модуль. Сначала посмотрим, какие таргеты нам доступны. Напишем в консоль команду targets (рис.7)

Рис.7 Доступные таргеты для текущей конфигурации

   Как видим нам доступны три таргета. Символ «*» говорит, что текущий таргет MicroBlaze #0  и все наши команды из консоли будут адресованы текущему таргету, т.е. MicroBlaze’у. Для нас таргетом должен быть MDM. Чтобы это сделать необходимо выполнить команду targets c опцией –set (рис.8). После ввода команды установки таргета, проверяем, прошла ли установка, написав команду targets

Рис. 8 Установка и проверка установки таргета MDM

   Как видим, текущий таргет 2 – это и есть MDM. Теперь можем запустить терминал, используя команду jtagterminal с опцией –start (рис.9). После выполнения команды откроется новое окно, где будут отображаться результаты выполнения функции xil_printf(), то есть будет дублирование нашей TCF консоли, но в отличие от последней, из этого терминала можно копировать содержимое. Значение 50057 отображает номер порта для терминала и может быть другим.

Рис. 9 Запущенный терминал JTAG-UART

   Нажав несколько раз кнопки пошаговой отладки, мы увидим, что значения отображаются как в терминале так и в консоли (рис.10)

Рис.10 Результат выполнения нескольких команд в пошаговом режиме. Из чёрного окошка можно копировать его содержимое.

   После окончания каждой отладки или сбора информации не забудьте закрыть порт терминала, используя команду jtagterminal с опцией –stop, которую надо ввести в консоли XSDB

Рис.11 Остановка терминала для корректного завершения работы

Категория: Xilinx SDK | Добавил: KeisN13 (05.04.2017)
Просмотров: 620 | Теги: Xilinx, tcl, SDK | Рейтинг: 5.0/1
Всего комментариев: 0
avatar