nanorobot 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Пользуясь статьей уважаемого arhiv_6 регулярно применяю Segger RTT для отладки проектов на STM32. До сих пор это были проекты на камнях с ядром М4. Сейчас возникла потребность отладки проекта на ядре CortexM0. И вот здесь имею сложности. Каждый раз получаю сообщение Searching for RTT control block 'SEGGER RTT хотя переменная _SEGGER_RTT в окне Expressions наблюдается, соответственно никакого вывода в терминал не происходит. Да, во всех случаях использую ST-Link V2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 28 минут назад, nanorobot сказал: Да, во всех случаях использую ST-Link V2. Импосибл, мистер Карабасоф. Только J-Link. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 8 minutes ago, VladislavS said: Импосибл, мистер Карабасоф. Только J-Link. Вы не правы. 1. Почитайте статью. 2. Да, во всех случаях использую ST-Link V2. для М4 все работает как с STLink так и с JLink. Личный опыт. Или вы хотелм сказать что только JLink для CortexM0? Из собственного опыта? Изменено 5 апреля, 2020 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Статью действительно не читал. От групповухи отписываюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 1 час назад, nanorobot сказал: Каждый раз получаю сообщение Это от кого сообщение такое? От openocd? Если да - то почему-то он не может найти контрольный блок в памяти (по указанному вами адресу). 1) Попробуйте собрать проект без оптимизации. 2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте что в памяти по этому адресу в первых байтах лежит валидный ID (там должен быть просто текст "SEGGER RTT"). 2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте, что её адрес совпадает с тем, который вы передаёте в openocd с опцией rtt setup. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 12 minutes ago, arhiv6 said: Это от кого сообщение такое? От openocd? Если да - то почему-то он не может найти контрольный блок в памяти (по указанному вами адресу). 1) Попробуйте собрать проект без оптимизации. Да, все именно так. спасибо. Сделал тестовый проект, чисто для отработки RTT. Без оптимизации все работает, а вот уже начиная с уровня оптимизаии=1, перестает. Засада в том, что проект, который требует отладки, при оптимизации=0, сам уже толком не работает. Я склоняюсь к мысли, что не работает именно из за недостатка скорости, недостаточной эффективности кода без оптимизации. Насколько помню RTT на M4 работало при разных уровнях оптимизации. Изменено 5 апреля, 2020 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Возможно компилятор выбрасывает неиспользуемую переменную. Сделайте запись адреса этой переменной куда-нибудь, тогда оставит. Вот как я боролся с этой проблемой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 1 hour ago, arhiv6 said: 2) Если вы в отладчике переменную _SEGGER_RTT видите, проверьте что в памяти по этому адресу в первых байтах лежит валидный ID (там должен быть просто текст "SEGGER RTT") при оптимизации > 0 все поля равны 0 Изменено 5 апреля, 2020 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 7 hours ago, nanorobot said: Пользуясь статьей Слегка не в тему. Вы под линуксом работаете, или под виндой? Не могу сказать, что я ОЧЕНЬ пытался, но собрать openocd под винду у меня не получилось... 5 hours ago, nanorobot said: при оптимизации > 0 все поля равны 0 init не вызывается?.. По идее, при первом же RTT_printf должен вызваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 1 hour ago, esaulenka said: Слегка не в тему. Вы под линуксом работаете, или под виндой? Segger RTT в проекте для CortexM0. Linux/GCC/Eclipse. Причина в оптимизаци. Добавил опрос _SEGGER_RTT.acID[0] на ненулевое значение, все более менее пришло в норму. Почему более или менее а не плоностью: при включенной оптимизации высокого уровня обычно при пуске вывод на терминал не работает. НО если программу запаузить, и посмотреть содержимое буфера _SEGGER_RTT, то можно увидеть, что он заполнен отладочным выводом. Если после этого выполнение запустить снова, то вывод на терминал начинает выполняться. Но не всегда. Также это может зависеть от интенсивности вывода. В специальном проекте чисто для тестирования RTT, и не перегруженном другим функционалом, тоже все похоже. Для камней с ядром M4 таких заморочек с RTT не наблюдал. Как то все слегка загадочно. Но проблему, ради чего это все затевалось, решил. Изменено 5 апреля, 2020 пользователем nanorobot Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Я с чем-то подобным сталкивался на STM32F105. Почему-то при использовании sleep'а консолька стала вести себя неадекватно. К сожалению, так и не дошли руки разобраться - в отладочной версии просто не использую __WFI(). FAQ от сеггера также не рекомендует использовать энергосбережение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 9 minutes ago, esaulenka said: Я с чем-то подобным сталкивался на STM32F105. Почему-то при использовании sleep'а консолька стала вести себя неадекватно. К сожалению, так и не дошли руки разобраться - в отладочной версии просто не использую __WFI(). FAQ от сеггера также не рекомендует использовать энергосбережение. Нудно поставить DEBUG SLEEP ... DEBUG STANDBY ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reflector 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 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] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться