Jump to content

    

Не получается запустить SEGGER RTT

Скачал и установил JLink Software and Documentation Pack 614d. Добавил к проекту все необходимые файлы. В процессе компиляции получил следующие ругательства

 

In file included from SEGGER_RTT_V614d//Syscalls/SEGGER_RTT_Syscalls_GCC.c:64:0:

/usr/local/gcc-arm-none-eabi-5_3-2016q1/arm-none-eabi/include/reent.h:159:17: note: previous declaration of '_write_r' was here

extern _ssize_t _write_r _PARAMS ((struct _reent *, int, const void *, size_t));

 

по отношению к фукции

 

int _write_r(struct _reent *r, int file, const void *ptr, int len);

 

заменил сигнатуру функциии на

 

_ssize_t _write_r _PARAMS ((struct _reent *, int, const void *, size_t));

 

после чего компиляция завершилась успешно

 

Вызвал в main()

 

SEGGER_RTT_ConfigUpBuffer(0, NULL, &buf[0], 256, SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);

 

несколькими строками ниже с периодичностью около 2 Гц вызываю

 

SEGGER_RTT_Write(0, "Segger_RTT \r\n", 13);}

 

для контроля, вызов сопровождаю миганием светодиода, Запускаю JLinkExe и выполняю connect. затем запускаю Putty: telnet / localhost / port 19021.

 

Telnet соединения срастается, но никакого вывода в Putty не происходит. Да, JLink не оригинальный, естественно - клон от starterkit. Может быть в этом причина?

Так как используется блокирующий вывод процесс(мигание светодиода) длится недолго, затем, когда буфер вывода заполнится, все застревает. Верно ли я понимаю,

что освобождение буфера производится выпjлняет JLink(больше некому вроде)

Edited by nanorobot

Share this post


Link to post
Share on other sites
Вряд ли дело в оригинальности программатора, если к нему JLinkExe цепляется. Можете попробовать с помощью OpenOCD связь проверить: http://we.easyelectronics.ru/arhiv_6/rtt-s...-ot-segger.html

 

 

Крайне признателен ! Попробую...

Share this post


Link to post
Share on other sites
Можете попробовать с помощью OpenOCD связь проверить:

Какой смысл проверять какими-то сторонними утилитами, если в составе segger-а есть всё необходимое???

ТС-у надо заглянуть в папку установленного ПО Segger-а и ознакомиться с разными утилитами там.

Там есть например JFlash.exe, с помощью которой можно и проверить JLink подключившись к МК и прошить/проверить прошивку.

И JLinkConfig.exe - для обновления прошивки JLink.

Share this post


Link to post
Share on other sites
Какой смысл проверять какими-то сторонними утилитами, если в составе segger-а есть всё необходимое???

ТС-у надо заглянуть в папку установленного ПО Segger-а и ознакомиться с разными утилитами там.

Там есть например JFlash.exe, с помощью которой можно и проверить JLink подключившись к МК и прошить/проверить прошивку.

И JLinkConfig.exe - для обновления прошивки JLink.

 

Проверять JLink на возможность прошить не требуется. Прошивка / отладка ведктся именно с его помощью. Имелись лишь

сомнения по поводу его работы в RTT.

Edited by nanorobot

Share this post


Link to post
Share on other sites
Можете попробовать с помощью OpenOCD связь проверить: http://we.easyelectronics.ru/arhiv_6/rtt-s...-ot-segger.html

 

Попытался запустить описанным по этой ссылке методом. Результат - RTT скрипт OpenOCD либо не находит RTT control block, либо(в случае когда я в скрипте задаю в качестве диапазона поиска всю RAM) находит не по тому адресу (правильный адрес нахожу в окне Expressions), и соответственно выода в SEGGER J-Link RTT Client не происходит. Кому удалось запустить RTT методом описанным по ссылке, поделитесь опытом плизз.

Или , кто зарегистрирован на изиэлектроникс, пришлите приглашение для регистрации. Задам вопрос там. Мыло: r*a*i*n*6*2*s*t*e*r собака.гмайл.ком

Edited by nanorobot

Share this post


Link to post
Share on other sites

RTT технология примечательна тем, что требует уникальных первичных имён переменных и массивов. Если менять имена - то плагин не сможет найти свои данные. Так-же записывается уникальный паттерн в область первого массива на передачу. У него есть стандартная голова, тело - размеры массивов и их местоположение, и пассивное заполнение остатка. Массив не может быть меньше 128 байт.

Недостаток технологии - в способе сборки. RTT, также как и EBmonitor поставляется в виде собранной библиотеки, которая уже на стадии линковки подключается к проекту.

При этом в самой библиотеке имеется место где переключается тип ядра, это сделано для универсальности. Это-же свойство может стать основной проблемой при сборке проекта. Например при использовании собственного алгоритма выделения памяти - будет вечный сбой.

 

При отладке без выхода из режима программирования - отладчику доступно все использующиеся символьные имена проекта, в этом случае поиск по паттерну не используется.

При горячем "подключении" (без ресета) - наличие паттерна - обязательно.

 

RTT и EBmonitor - полные клоны. Могу предложить код который получился для EBmonitor.

https://bitbucket.org/AVI-crak/rtos-cortex-...le-view-default

 

Share this post


Link to post
Share on other sites
RTT технология примечательна тем, что требует уникальных первичных имён переменных и массивов. Если менять имена - то плагин не сможет найти свои данные. Так-же записывается уникальный паттерн в область первого массива на передачу. У него есть стандартная голова, тело - размеры массивов и их местоположение, и пассивное заполнение остатка. Массив не может быть меньше 128 байт.

 

Признаюсь честно - мало чего понял.. : :( Зато есть куда расти...

 

кстати - один раз срослось, вывод заработал.. Решил добавить вывод во второй виртуальный терминал. Получил сообщение в логе скрипта RTT - Info : RTT already started.

вернул все обратно, но ничего не изменилось - Info : RTT already started

Share this post


Link to post
Share on other sites
Признаюсь честно - мало чего понял.. : :( Зато есть куда расти...

Понимать следует буквально, нельзя менять названия массивов и структур - RTT перестаёт их находить.

Ещё одна вещь, технология RTT выполняет одну попытку поиска своих данных. По этой причине инициализация структур и массивов должна выполняться до первой контрольной точки, чаще всего это шапка майна.

Библиотека от RTT (без вмешательства) - инициализирует свои данные до майна.

Share this post


Link to post
Share on other sites
Понимать следует буквально, нельзя менять названия массивов и структур - RTT перестаёт их находить.

Nanorobot скачал JLink Software and Documentation Pack, там есть архив с исходниками RTT, никакие либы не нужны, меняй имена как хочешь, или я что-то недопонимаю?

Share this post


Link to post
Share on other sites
Nanorobot скачал JLink Software and Documentation Pack, там есть архив с исходниками RTT, никакие либы не нужны, меняй имена как хочешь, или я что-то недопонимаю?

 

дак как то и смысла особенного их менять не просматривается ... :05:

Share this post


Link to post
Share on other sites
меняй имена как хочешь

Можно менять размеры буферов от 128б до "сколько влезет", остальное завязано на плагин - который работает на большой машине.

По ссылкам нет си исходников плагина для ID.

Share this post


Link to post
Share on other sites
Можно менять размеры буферов от 128б до "сколько влезет", остальное завязано на плагин - который работает на большой машине.

По ссылкам нет си исходников плагина для ID.

Не знаю что там завязано, но я взял исходники, основательно их переделал, запихнул все в класс и давно пользуюсь.

Share this post


Link to post
Share on other sites
Не знаю что там завязано, но я взял исходники, основательно их переделал, запихнул все в класс и давно пользуюсь.

Аналогично, только без классов. Без всяких библиотек - из исходников.

Share this post


Link to post
Share on other sites
Аналогично, только без классов. Без всяких библиотек - из исходников.

 

Еще раз подниму тему. Делал по ссылке приведенной выше. http://we.easyelectronics.ru/arhiv_6/rtt-s...-ot-segger.html.

Получил работоспособный вариант на связке STLink V2 / STM32F373. C клоном JLink от starterkit так толком ничего и не вышло. Возможно руки кривые. Далее возлагал

надежды на STLink. Попытался использовать его в связке с STM32F051. И вот здесь успеха добиться не удалось. В консоли все время получаю сообщение "Info : No RTT control block found".

Пробовал указывать в скрипте всю RAM камня в качестве области для поика RTT, менял уровень олптимизации компилятора до самого низкого. Но всегда плучал один и тот же результат.

RTT control block found. Вроде и путь уже проторенный (с F373) но тем не менее. Может быть все таки STM32F0xx не поддерживает эту возvожность?

Edited by nanorobot

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this