В МК добавляется код, который выделяет в ОЗУ область памяти RTT с заданной структурой. Отладчик J-Link по признакам находит эту область ОЗУ. Через этот кусок памяти МК и РС ведут обмен. Все.
Подключение в коде описано во многих источниках - берем исходники из каталога установки J-Link, например, и пишем у себя #include "SEGGER_RTT.h".
Используем функции RTT.
Особенность: После компиляции имеем в программе один комплект буферов обмена номер 0 с размером по умолчанию.
Этот размер никаким функциям не поддается - устанавливается только RTT директивами по умолчанию #define RTT (CONST). Фирменная функция SEGGER_RTT_ConfigUpBuffer(..) работает, оказывается, только если задаем не нулевой, а 1й, 2й, ... буфер.
Разные буферы Segger предлагает использовать для разделения разнородных потоков данных, текстовый и бинарный потоки, например.
Общую скорость вывода данных несколько буферов, ясно, что никак не увеличивают.
В рамках нулевого буфера текст можно выдавать с 16-тью разными префиксами - для нас это значит по 16 каналам (или виртуальным терминалам).
Каждый канал в программе RTT-Viewer отображается в отдельном окне.
Надо аккуратно смотреть аргументы функций - где-то задается номер буфера данных, где-то номер канала (вирт.терминала).
Чаще всего буфер один - нулевой, каналов несколько.
Подключать программу RTT-Viewer к конкретному камню можно:
- указав его тип (хотя у меня для того же STM32F103RBT6 так не подключается)
- указав регион памяти, как я понял, достаточно указать адресную зону встроенного ОЗУ
- указав точный адрес, если в программе задать точный адрес управляющей структуры RTT
Два последних способа работают для STM32F103RBT6
Подключение в коде описано во многих источниках - берем исходники из каталога установки J-Link, например, и пишем у себя #include "SEGGER_RTT.h".
Используем функции RTT.
Особенность: После компиляции имеем в программе один комплект буферов обмена номер 0 с размером по умолчанию.
Этот размер никаким функциям не поддается - устанавливается только RTT директивами по умолчанию #define RTT (CONST). Фирменная функция SEGGER_RTT_ConfigUpBuffer(..) работает, оказывается, только если задаем не нулевой, а 1й, 2й, ... буфер.
Разные буферы Segger предлагает использовать для разделения разнородных потоков данных, текстовый и бинарный потоки, например.
Общую скорость вывода данных несколько буферов, ясно, что никак не увеличивают.
В рамках нулевого буфера текст можно выдавать с 16-тью разными префиксами - для нас это значит по 16 каналам (или виртуальным терминалам).
Каждый канал в программе RTT-Viewer отображается в отдельном окне.
Надо аккуратно смотреть аргументы функций - где-то задается номер буфера данных, где-то номер канала (вирт.терминала).
Чаще всего буфер один - нулевой, каналов несколько.
Подключать программу RTT-Viewer к конкретному камню можно:
- указав его тип (хотя у меня для того же STM32F103RBT6 так не подключается)
- указав регион памяти, как я понял, достаточно указать адресную зону встроенного ОЗУ
- указав точный адрес, если в программе задать точный адрес управляющей структуры RTT
Два последних способа работают для STM32F103RBT6