Перейти к содержанию

SEGGER RTT (Real Time Transfer)

Отладочный printf через UART занимает вывод, требует настроенного тактирования и тормозит программу на медленной скорости. RTT от SEGGER обходится без лишних выводов: программа пишет текст в буфер в ОЗУ, а отладчик забирает его по тому же интерфейсу SWD, через который прошивает.

Обновлено Редакция GAW

SEGGER RTT (Real Time Transfer) — технология обмена данными между программой микроконтроллера и компьютером через отладчик J-Link. Программа пишет данные в кольцевые буферы в ОЗУ, а J-Link читает их через отладочный интерфейс SWD или JTAG, не останавливая ядро. SEGGER описывает RTT как сочетание преимуществ SWO и semihosting: выводов не больше, чем для прошивки, а скорость высокая.

Как устроено

В ОЗУ лежит блок управления (control block): идентификатор, по которому J-Link его находит, и описатели каналов. Каждый канал — пара кольцевых буферов: «вверх» (от программы к компьютеру) и «вниз» (обратно). Отладчик ищет блок управления сам — сначала по адресу, записанному в таблице векторов со смещением 0x20, затем перебором областей ОЗУ, — или по заданному вручную адресу.

Гонки между программой и отладчиком исключены разделением прав: у буфера «вверх» указатель записи меняет только программа, а указатель чтения — только J-Link; у буфера «вниз» наоборот.

Ресурсы и скорость

ПараметрПо данным SEGGER
Кодоколо 500 байт ПЗУ
Блок управления24 байта + 24 байта на канал
Буфер «вверх»рекомендуется 1 КБ
Буфер «вниз»16–32 байта
Вывод строкиоколо 1 мкс и меньше

Скорость объясняется тем, что вывод сводится к копированию в память; передачей по SWD занимается отладчик.

Если буфер полон

Режим задаётся для каждого канала: блокирующий — программа ждёт, пока отладчик освободит место, данные не теряются; без блокировки — сообщение, которое не помещается, отбрасывается целиком или обрезается по свободному месту. Неблокирующий режим позволяет оставить вывод в релизной прошивке: без подключённого J-Link программа просто работает дальше.

Когда выбрать

RTT удобен на ядрах и в корпусах без трассировки, где нет ITM или вывода SWO, и там, где UART занят. Сравнение UART, SWO, semihosting и RTT, уровни журнала и метки времени — в статье о логировании и трассировке. Возможности отладчиков J-Link перечислены в обзоре программаторов.

Частые вопросы

Чем RTT отличается от SWO?

SWO выводит данные блока ITM по отдельному выводу трассировки, а он есть не у всех ядер и корпусов. RTT использует только память: программа пишет в кольцевой буфер в ОЗУ, отладчик читает его через тот же SWD, что и при прошивке. Поэтому RTT работает и там, где вывода SWO нет, и умеет передавать данные в обратную сторону — от компьютера к программе.

Будет ли программа зависать без подключённого J-Link?

Нет, если канал настроен в неблокирующем режиме: по описанию SEGGER, лишние данные отбрасываются, и программа работает в реальном времени даже без отладчика. Поэтому вызовы RTT можно оставлять в релизной сборке. В блокирующем режиме программа ждёт освобождения места и при отсутствии отладчика остановится.

Какой нужен программатор для RTT?

SEGGER описывает RTT как технологию J-Link: отладчик сам находит блок управления в ОЗУ и читает буферы фоновым доступом к памяти. Некоторые другие отладчики и среды тоже поддерживают формат RTT, но это уже их реализация, а не продукт SEGGER.

Источники

  1. SEGGER Knowledge Base: RTT (kb.segger.com/RTT), страница по состоянию на октябрь 2026 — RTT — технология двустороннего обмена с целевой системой без влияния на её работу в реальном времени, сочетает преимущества SWO и semihosting; блок управления (control block) и кольцевые буферы каналов в ОЗУ; J-Link ищет блок управления сам (сначала по адресу в таблице векторов со смещением 0x20) или по заданному адресу; у буфера «вверх» указатель записи пишет только целевая программа, указатель чтения — только отладчик, гонок нет; строка текста выводится примерно за 1 мкс и быстрее — по сути время одного memcpy(); код — около 500 байт ПЗУ, блок управления — 24 байта ID и 24 байта на канал; рекомендуемые буферы — 1 КБ «вверх» и 16–32 байта «вниз»; режимы: блокирующий, без блокировки с отбрасыванием всего сообщения, без блокировки с обрезкой; дополнительных выводов не требует, только J-Link на стандартном отладочном порту; для ядер без фонового доступа к памяти есть режим с остановкой CPU
  2. Arm. ARMv7-M Architecture Reference Manual, DDI 0403E.e, 2021 — разд. C1.7: ITM — регистровый интерфейс для вывода событий в приёмник трассировки; для сравнения: SWO требует отдельного вывода трассировки

Нашли ошибку?