J-Link RTT Viewer это GUI-приложение, доступное под операционными системами Windows, MacOS и Linux, и оно может быть загружено как часть пакета программного обеспечения и документации для отладчика SEGGER J-Link (J-Link Software and Documentation Pack) с сайта компании SEGGER. J-Link RTT Viewer позволяет реализовать все функции RTT для отладки приложения [2].
Основные возможности J-Link RTT Viewer:
• Отображение вывода в терминал Channel 0. • До 16 виртуальных терминалов Channel 0. • Отправка введенного текста в Channel 0. • Интерпретация выводимых текстовых кодов управления для подкрашивания текста и управления выводом на терминал. • Запись данных терминала в лог-файл. • Лог данных на Channel 1.
[Запуск J-Link RTT Viewer]
Убедитесь, что J-Link и целевой отлаживаемый MCU приложения соединены друг с другом, и в систему подано питание. Запустите J-Link RTT Viewer открытием исполняемого файла(JLinkRTTViewer.exe/JLinkRTTViewerExe, в операционной системе Windows по умолчанию он находится в каталоге c:\Program Files (x86)\SEGGER\JLink_Vxxx, где xxx обозначают версию ПО SEGGER), либо через меню запуска. Если при запуске не указана опция командной строки --autoconnect, то откроется диалоговое окно конфигурации (Configuration).
Сконфигурируйте настройки соединения, как будет описано далее, и кликните OK. Настройки соединения и конфигурация приложения будут сохранены для последующего запуска J-Link RTT Viewer.
[Диалог J-Link RTT Viewer Configuration]
Этот диалог используется для установки всех специфических для отлаживаемого MCU настроек, чтобы успешно запускалось соединение через интерфейс отладки, и можно было читать/передавать данные RTT из целевого MCU или в него.
J-Link RTT Viewer может использоваться в 2 режимах:
• Stand-alone, с открытием собственного соединения с J-Link и целевым MCU, без запуска сессии отладки в IDE. • Attach mode, с подключением к существующему соединению отладчика с J-Link.
Stand-alone. В этом режиме для J-Link RTT Viewer нужно определить некоторые настройки, относящиеся к аппаратуре J-Link и целевого MCU:
- Выбрать интерфейс подключения к J-Link - USB или TCP/IP. Для USB опционально можно определить серийный номер J-Link, а для TCP/IP нужно указать IP или имя хоста. - Выбрать модель целевого MCU, к которому осуществляется подключение. Это позволит J-Link найти известную оперативную память (RAM) MCU. - Выбрать интерфейс подключения к целевому MCU (SWD, cJTAG, FINE) и скорость интерфейса. - Выбрать вариант поиска RTT Control Block. Поиск может осуществляться полностью автоматически, может быть установлен фиксированный адрес, или может быть выбран диапазон адресов памяти RAM для поиска.
Обратите внимание, что блок управления RTT не может быть найден автоматически, если он не помещен в RAM, заданную библиотекой J-Link. В этом случае адрес или диапазон RAM должен быть задан пользователем.
Attach mode. Если выбрать Connection to J-Link -> Existing Session, то RTT Viewer запустится в режиме подключения к существующей сессии J-Link (attach mode). В этом режиме для J-Link RTT Viewer обычно не требуется каких-либо дополнительных настроек, однако адрес RTT Control Block или область его поиска все еще выбирается при необходимости.
Для attach mode соединение с J-Link должно быть открыто и сконфигурировано в другом приложении наподобие отладчика или просто утилиты J-Link Commander [3].
Attach mode особенно полезен, когда используется отладчик сторонней фирмы или IDE, работающее с отладчиком J-Link (например IAR, Keil или Eclipse).
[Закладки терминалов]
J-Link RTT Viewer позволяет отобразить вывод Channel 0 в разных "виртуальных" Терминалах. Целевое приложение может переключаться между терминалами с помощью вызовов функций SEGGER_RTT_SetTerminal() и SEGGER_RTT_TerminalOut(). J-Link RTT Viewer отображает терминалы на разных закладках.
All Terminals. Эта закладка отобразит полный вывод в RTT Channel 0, и позволяет реализовать ввод пользователя (Check Input -> Echo input... -> Echo to "All Terminals"). В начале каждой выводимой строки на этой закладке будет показан номер виртуального терминала (00, 01, ..), в который было отправлено сообщение. Для акцента вывод в терминал 1 показан красным цветом, а вывод в терминалы 2 .. 15 серым цветом:
Terminal 0 - 15. Каждая из закладок Terminal 0 .. Terminal 15 отобразит вывод текста, который был отправлен в соответствующий терминал. Закладки Terminal интерпретируют и обрабатывают коды управления выводом текста (Text Control Codes), которые может посылать отлаживаемое приложение MCU, чтобы раскрасить выводимый текст или очистить экран терминала. На закладках Terminal 0 - 15 каждая выводимая строка отображается без префикса, обозначающего номер терминала.
По умолчанию, если приложение не установило идентификатор терминала, то вывод будет отображаться в Terminal 0.
Закладка Terminal 0 дополнительно может реализовать ввод символов текста пользователем (Check Input -> Echo input... -> Echo to "Terminal 0").
Каждая из закладок терминала может быть отображена или скрыта через меню Terminals -> Terminals..., или соответствующими горячими клавишами (см. далее врезку "Меню и горячие клавиши").
Открывает диалог настройки соединения с целевым MCU.
F2
Disconnect
Отключает от целевого MCU.
F3
Exit
Закрывает открытое соединение и производится выход из утилиты RTT Viewer.
Alt+F4
Меню Terminals:
Пункт меню
Действие
Shortcut
Add next terminal
Открывает закладку для следующего доступного терминала.
Alt+A
Clear active terminal
Очистит (удаляется весь выведенный текст) текущую выбранную закладку терминала.
Alt+R
Close active terminal
Закрывает текущую выбранную закладку терминала.
Alt+W
Open Terminal on output
Если выбрано, то при получении данных автоматически создастся терминал и будут отображены на нем полученные данные.
Edit font size
Откроет диалог выбора размера шрифта.
Terminals -> Terminal 0 - 15
Откроет или закроет закладку терминала.
Alt+Shift+0, ..., Alt+Shift+F
Меню Input:
Пункт меню
Действие
Shortcut
Очищает поле ввода без отправки введенных данных.
Кнопка "Clear"
Sending... -> Send on Input
Если выбрано, то нажатия клавиш при вводе немедленно приводят к отправке соответствующего символа.
Sending... -> Send on Enter
Если выбрано, то введенный текст будет отправлен только после нажатия на Enter.
Sending... -> Block if FIFO full
Если выбрано, то RTT Viewer будет делать повторные отправки введенного текста, когда буфер целевого MCU переполнен.
End of line... -> Windows format (CR+LF)
Выбирает символ обозначения конца строки, который отправляется в конце введенной передаваемой строки при нажатии Enter.
End of line... -> Unix format (LF)
End of line... -> Mac format (CR)
End of line... -> None
Echo input... -> Echo to "All Terminals"
Если выбрано, то отправляемые символы будут как эхо появляться на закладке All Terminals.
Echo input... -> Echo to "Terminal 0"
Если выбрано, то отправляемые символы будут как эхо появляться на закладке Terminal 0.
Меню Logging:
Пункт меню
Действие
Shortcut
Start Terminal logging...
Запускает запись в лог-файл данных терминала.
F5
Stop Terminal logging
Останавливает запись в лог данных терминала и закрывает лог-файл.
Shift+F5
Start Data logging...
Запускает запись в лог-файл данных Channel 1.
F6
Stop Terminal logging
Останавливает запись в лог данных Channel 1 и закрывает лог-файл.
Shift+F6
Channel infos...
Отображает информацию о всех доступных каналах RTT.
F8
Меню Help:
Пункт меню
Действие
Shortcut
About...
Показывает информацию об утилите RTT Viewer.
F12
J-Link Manual...
Откроет PDF-файл руководства пользователя J-Link.
F11
RTT Webpage...
Откроет в браузере веб-страницу с информацией об RTT.
F10
Пункты контекстного меню закладок:
Пункт меню
Действие
Shortcut
Close Terminal
Закроет эту закладку терминала.
Alt+W
Clear Terminal
Очистит весь выведенный текст на этой закладке терминала.
Alt+R
[Отправка текста]
J-Link RTT Viewer может послать в MCU текст, введенный пользователем, в RTT Down Channel 0. Этот переданный текст может быть прочитан приложением MCU с помощью вызовов функций SEGGER_RTT_GetKey() и SEGGER_RTT_Read().
Передаваемый текст можно вводить в поле, которое находится ниже окна вывода терминала. Также J-Link RTT Viewer может быть сконфигурирован для непосредственной отправки каждого символа в процессе ввода символов, или отправки буфера после нажатия клавиши Enter is pressed (меню Input -> Sending...).
В stand-alone mode утилитаJ-Link RTT Viewer может повторно отправлять введенный текст в случае, когда буфер целевого MCU заполнен, до тех пор, пока все данные не будут отправлены, это настраивается через меню Input -> Sending... -> Block if FIFO full.
[Запись вывода в лог]
Вывод Channel 0 и Channel 1 может записываться в файл лога.
Terminal output (Channel 0). Формат вывода тот же самый, что используется на закладке All Terminals. Запись лога может быть активирована через меню Logging -> Start Terminal Logging...
Data output (Channel 1). Лог Channel 1 может использоваться, например, для отправки данных трассировки событий (instrumented event tracing data). Файл лога данных содержит заголовок (header) и блок завершения (footer), и двоичные данные, которые были получены из приложения. Запись лога данных может быть активирована через меню Logging -> Start Data Logging...
Примечание: Data Logging доступен только в stand-alone mode.
[Опции командной строки]
J-Link RTT Viewer может быть сконфигурирован через параметры командной строки. Все параметры (опции) командной строки не чувствительны к регистру символов. И у коротких, и у длинных имен команд используется одинаковый синтаксис.
Опция
Описание
-b, --bright
Яркая тема для интерфейса.
-d, --device
Выбор целевого MCU, к которому осуществляется подключение.
-ct, --connection
Устанавливает тип соединения между J-Link и PC.
-if, --interface
Устанавливает тип интерфейса подключения к MCU.
-ip, --host
IP-адрес J-Link.
-s, --speed
Скорость передачи данных интерфейса подключения к MCU.
-sf, --scriptfile
Выполняет при запуске скрипт команд.
-sn, --serialnumber
Выберет J-Link с определенным серийным номером.
-ra, --rttaddr
Установит адрес RTT control block.
-rr, --rttrange
Указывает диапазон поиска адресов RTT control block.
-a, --autoconnect
Автоматическое соединение, подавляется появление диалога конфигурации.
-ti, --terminalindex
При старте откроется терминал с указанным номером.
--bright
Запустит RTT Viewer в яркой теме.
--device
Выберет целевой MCU, к которому нужно подключиться. Пример:
JLinkRTTViewer.exe --device STM32F103ZE
--connection
Устанавливает тип подключения к отладчику J-Link (usb, ip или sess). Подключение может быть либо через USB, через адрес IP, или с использованием существующей сессии (например, сессии отладки, которая была предварительно запущена в IDE). В случае использования существующей сессии никаких других опций конфигурации указывать не нужно.
Синтаксис:
--interface < fine|jtag|swd >
Пример:
JLinkRTTViewer.exe --interface swd
--host
Ввод IP-адреса или имени хоста J-Link. Эта опция применима только для сетевого подключения. Вместо IPAddr используйте * для получения списка доступных отладчиков J-Link в локальной подсети.
Синтаксис:
--host < IPAddr >
Пример:
JLinkRTTViewer.exe --host 192.168.1.17
--speed
Установит скорость передачи интерфейса в (частота тактов в кГц) для соединения J-Link с целевым MCU.
Синтаксис:
--speed < частота_кГц >
Пример:
JLinkRTTViewer.exe --interface swd --speed 4000
--scriptfile
Выполняет при запуске скрипт команд J-Link. Внимание: это совсем не то, что можно было подумать - в скрипте команд не указываются опции командной строки. По сути это программа на языке C.
Подключится к J-Link через USB по указанному его серийному номеру. Опция полезна, когда к одному компьютеру PC подключено несколько отладчиков J-Link, и необходимо запустить несколько сессий RTT Viewer индивидуально для каждого J-Link.
Синтаксис:
--serialnumber < серийный_номер >
Пример:
JLinkRTTViewer.exe --serialnumber 12345678
--rttaddr
Установит фиксированный адрес для места нахождения RTT control block в памяти RAM. Это запретит автоматический поиск RTT control block.
Синтаксис:
--rttaddr < RTTCBAddr >
Пример:
JLinkRTTViewer.exe --rttaddr 0x20000000
--rttrange
Установит один или несколько диапазонов поиска в памяти, в которых J-Link DLL должна найти RTT control block.
Позволяет J-Link RTT Viewer автоматически подключиться к целевому MCU без отображения диалога настройки соединения (см. выше "Диалог J-Link RTT Viewer Configuration").
Пример:
JLinkRTTViewer.exe --autoconnect
--terminalindex
При запуске откроет терминал с указанным индексом. Значение индекса может быть в диапазоне [0:16], где 0 соответствует All Terminals, 1 соответствует Terminal 0, ..., 16 соответствует Terminal 15.
Этот пример подключится через SWD к микроконтроллеру nRF52832 (--device) и запустит сразу 2 закладки All Terminals и Terminal 0 (они открываются по умолчанию). Адаптер отладки J-Link, подключенный через USB (--connection), выбирается по серийному номеру (--serialnumber). Диалог настройки параметров не открывается (--autoconnect).
Для отправки текста в виртуальные терминалы 0 .. 15 нужен только один Channel 0. Это особенно важно для целевых MCU, у которых мало памяти RAM.
Замечания:
• Если не указан терминал, то все данные отправляются по умолчанию в Terminal 0. • Терминал, который должен отображать вывод всех последующих вызовов Write, WriteString или printf, может быть установлен функцией SEGGER_RTT_SetTerminal(). • Вывод в определенный терминал только одной строки может быть осуществлен вызовом SEGGER_RTT_TerminalOut(). • Управляющие последовательности, посылаемые для для смены терминала, интерпретируются J-Link RTT Viewer, однако другие приложения наподобие Telnet Client будут их игнорировать.
[Использование Text Control Codes]
RTT позволяет использовать коды управления выводом текста (Text Control Codes, стандартные коды ANSI escape), чтобы сконфигурировать отображение выводимого текста. J-Link RTT Viewer поддерживает изменение цвета текста и цвета фона, и очистку терминала. Эти коды управления предопределены макросами #define приложении MCU, и их можно просто использовать по установленным мнемоническим именам.
Пример 1:
SEGGER_RTT_WriteString(0,
RTT_CTRL_RESET"Green: " \
RTT_CTRL_TEXT_BRIGHT_GREEN"Этот текст будет выведен зеленым цветом. " \
RTT_CTRL_TEXT_BLACK"" \
RTT_CTRL_BG_BRIGHT_RED"Фон выводимого текста будет красным. " \
RTT_CTRL_RESET"Здесь будет снова отображаться текст как обычно."
);
1. Иногда RTT Control Block не может быть определен автоматически. Такое может произойти, например, когда RTT Control Block не находится в диапазоне адресов RAM, который определен вJ-Link DLL. Чтобы решить проблему, необходимо установить место расположения J-Link RTT Control Block в диалоге конфигурации соединения.
2. Если RTT Control Block найден, но данные в RTT Viewer все еще не отображаются, то убедитесь, что используете Channel 0 для всех передач, поскольку для всех терминалов поддерживается только Channel 0. Обратите внимание, что Channel 0 совсем не то же самое, что Terminal 0.
3. Замечен глюк - если во время двух запущенных соединений, когда открыто две отдельные утилиты RTT Viewer, отключить питание у одного из целевых MCU, то вывод в терминал перестает работать в обоих окнах утилиты, даже если восстановить питание MCU. Для устранения ошибки надо закрыть все запущенные экземпляры RTT Viewer, и запустить их заново.
4. Для дополнительной информации см. раздел решения проблем и FAQ статьи [4].