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

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

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

Searching for RTT control block 'SEGGER RTT

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, nanorobot сказал:

Да, во всех случаях использую ST-Link V2.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, VladislavS said:

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

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

 

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, nanorobot сказал:

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, arhiv6 said:

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

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

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, arhiv6 said:

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

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, nanorobot said:

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

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

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

 

5 hours ago, nanorobot said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, esaulenka said:

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

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

Изменено пользователем nanorobot

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, esaulenka said:

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

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

 

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

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

DEBUG STANDBY ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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]

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...