Jump to content

    
Sign in to follow this  
nanorobot

Segger RTT в проекте для CortexM0. Linux/GCC/Eclipse.

Recommended Posts

Пользуясь  статьей уважаемого arhiv_6  регулярно применяю Segger RTT для отладки проектов на STM32. До сих пор это были проекты на камнях с ядром М4.
Сейчас возникла потребность отладки проекта на ядре CortexM0. И вот здесь имею сложности. Каждый раз получаю сообщение

Searching for RTT control block 'SEGGER RTT

хотя переменная _SEGGER_RTT в окне Expressions наблюдается, соответственно никакого вывода в терминал не происходит. Да, во всех случаях использую ST-Link V2.

Share this post


Link to post
Share on other sites
8 minutes ago, VladislavS said:

Импосибл, мистер Карабасоф. Только J-Link.

Вы не правы. 1. Почитайте статью. 2. Да, во всех случаях использую ST-Link V2.  для М4 все работает как с STLink так и с JLink. Личный опыт. Или вы хотелм сказать что только JLink для CortexM0? Из собственного опыта?

 

Edited by nanorobot

Share this post


Link to post
Share on other sites
1 час назад, nanorobot сказал:

Каждый раз получаю сообщение 

Это от кого сообщение такое? От openocd? Если да - то почему-то он не может найти контрольный блок в памяти (по указанному вами адресу).

1) Попробуйте собрать проект без оптимизации.

2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте что в памяти по этому адресу в первых байтах лежит валидный ID (там должен быть просто текст "SEGGER RTT").

2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте, что её адрес совпадает с тем, который вы передаёте в openocd с опцией rtt setup.

Share this post


Link to post
Share on other sites
12 minutes ago, arhiv6 said:

Это от кого сообщение такое? От openocd? Если да - то почему-то он не может найти контрольный блок в памяти (по указанному вами адресу).

1) Попробуйте собрать проект без оптимизации.

Да, все именно так. спасибо. Сделал тестовый проект, чисто для отработки RTT. Без оптимизации все работает, а вот уже начиная с уровня оптимизаии=1, перестает. Засада в том, что проект, который требует отладки, при оптимизации=0, сам уже толком не работает. Я склоняюсь к мысли, что не работает именно из за недостатка скорости, недостаточной эффективности кода без оптимизации. Насколько помню RTT на M4 работало при разных уровнях оптимизации.
 

Edited by nanorobot

Share this post


Link to post
Share on other sites

Возможно компилятор выбрасывает неиспользуемую переменную.

Сделайте запись адреса этой переменной куда-нибудь, тогда оставит. Вот как я боролся с этой проблемой.

Share this post


Link to post
Share on other sites
1 hour ago, arhiv6 said:

2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте что в памяти по этому адресу в первых байтах лежит валидный ID (там должен быть просто текст "SEGGER RTT")

при оптимизации > 0 все поля равны 0

Edited by nanorobot

Share this post


Link to post
Share on other sites
7 hours ago, nanorobot said:

Пользуясь  статьей

Слегка не в тему. Вы под линуксом работаете, или под виндой?

Не могу сказать, что я ОЧЕНЬ пытался, но собрать openocd под винду у меня не получилось...

 

5 hours ago, nanorobot said:

при оптимизации > 0 все поля равны 0

init не вызывается?.. По идее, при первом же RTT_printf должен вызваться.

Share this post


Link to post
Share on other sites
1 hour ago, esaulenka said:

Слегка не в тему. Вы под линуксом работаете, или под виндой?

Segger RTT в проекте для CortexM0. Linux/GCC/Eclipse.
Причина в оптимизаци. Добавил опрос _SEGGER_RTT.acID[0] на ненулевое значение, все более менее пришло в норму.
Почему более или менее а не плоностью: при включенной оптимизации высокого уровня обычно при пуске вывод на терминал не работает. НО если программу запаузить, и посмотреть содержимое буфера _SEGGER_RTT, то можно увидеть, что он заполнен отладочным выводом. Если после этого выполнение запустить снова, то вывод на терминал начинает выполняться. Но не всегда. Также это может зависеть от интенсивности вывода. В специальном проекте чисто для тестирования RTT, и не перегруженном другим функционалом, тоже все похоже. Для камней с ядром M4 таких заморочек с RTT не наблюдал. Как то все слегка загадочно. Но проблему, ради чего это все затевалось, решил.

Edited by nanorobot

Share this post


Link to post
Share on other sites

Я с чем-то подобным сталкивался на STM32F105.

Почему-то при использовании sleep'а консолька стала вести себя неадекватно. К сожалению, так и не дошли руки разобраться - в отладочной версии просто не использую __WFI().

 

FAQ от сеггера также не рекомендует использовать энергосбережение.

Share this post


Link to post
Share on other sites
9 minutes ago, esaulenka said:

Я с чем-то подобным сталкивался на STM32F105.

Почему-то при использовании sleep'а консолька стала вести себя неадекватно. К сожалению, так и не дошли руки разобраться - в отладочной версии просто не использую __WFI().

 

FAQ от сеггера также не рекомендует использовать энергосбережение.

Нудно поставить
DEBUG SLEEP ...

DEBUG STANDBY ...

Share this post


Link to post
Share on other sites
On 4/5/2020 at 9:23 AM, nanorobot said:

Searching for RTT control block 'SEGGER RTT

Чтобы не искало CB, его адрес можно задать самому. У меня в разделе "Startup GDB сommands" прописано:

eval "monitor exec SetRTTAddr %p", &SEGGER_RTT

Share this post


Link to post
Share on other sites
SEGGER_RTT_Conf.h

#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY         (0x20)   // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20)

PM00215 STM32F0xxx Cortex-M0 programming manual

Table 27. IPR bit assignments

The processor implements only bits[7:6]

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this