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

Добрый день!

Есть STM32F4, ST-Link и CubeIDE.

Подскажите, возможно ли со стороны контроллера остановить выполнение под отладчиком?

Например какая-нить затычка обработчика ошибок. Сейчас там while(1) и пока не ткнешь на паузу в ИДЕ - не понятно чего происходит.

А хочется этот while заменить на команду остановки, чтоб ИДЕ показало что мы тут зависли. Тратить на это брякпоинт не хочется, их и так мало. Да и слетают они после редактирования кода.

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


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

в cmsis есть inline-asm обертка __BKPT(); вокруг ассемблерной функции bkpt.

Кстати, while(1) не самое удачное решение. Вот тут описывал более практичное. Если объединить его с вашей идеей использования там внутри инструкции bkpt - будет "ваще огонь". Пошел править свою библиотеку.

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


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

Пасибо, проверил - работает!

Это ж можно условные брякпоинты делать и ассерты нормально оформлять без вывода!

Но есть нюанс - проц на этой штуке тормозит даже без отладчика. Так что не везде она применима. Как вариант - делать условную компиляцию для отладки.

 

А про while - я обычно делаю Run->Move to line за ним и норм все выходит.

 

 

Далее следующий вопрос - как из кода обнаружить наличие отладчика?

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


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

Приветствую.

А что собственно делает bkpt? И что значит

28 minutes ago, Fox_Sanchez said:

проц на этой штуке тормозит даже без отладчика.

В чем заключаются тормоза?

 

 

28 minutes ago, Fox_Sanchez said:

А про while - я обычно делаю Run->Move to line за ним и норм все выходит.

А разве отладчик может перепрыгнуть условие, типа:

while(1);
while(1);// move to this line frome above

Или я не правильно понял?

ps. Попробовал -> не смог.

Видать не так понял

 

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


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

Тормозит в смысле останавливается. Даже если не в дебаге, а когда просто прошит.

А про while(1) в вашем случае компилятор скорее всего просто выкинул все что за ним находится. Если оно будет не просто в коде, а под условием - выпрыгивает без проблем.

Чтобы не понять неправильно - во время остановки ставлю курсор на желаемую строку и жму меню Run->Move to line. Так можно принудительно запускать выполнение нужных частей кода или обходить какие-нить условия. Но пользоваться надо осторожно, можно перепрыгнуть инициализацию переменной или еще что-нить важное и потом долго думать как так получилось.

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


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

6 часов назад, Fox_Sanchez сказал:

ST-Link

Простите, что не совсем по теме, но почему бы вам не превратить ST-Link в J-Link? Насколько я понимаю, лимит на точки останова будет снят. Рецепт.

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

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


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

4 hours ago, Fox_Sanchez said:

А про while(1) в вашем случае компилятор скорее всего просто выкинул все что за ним находится.

Попробовал так:

...
volatile byte x = 1;
while (x) ;
volatile byte z = 1;
while (z) ;
...

В дизасме вижу, что после вайлов код есть и сами вайлы есть. Но с while(x) До while(z) не прыгнул =(.

Возможно у меня студия (MSVS + VisualGDB) так не работает. Хотя было бы очень удобно.

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


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

Делаешь отдельную пустую функцию, ставишь  в ней брейкпоинт, вызываешь хоть из сотни разных мест.

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


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

17 hours ago, MrBearManul said:

Простите, что не совсем по теме, но почему бы вам не превратить ST-Link в J-Link? Насколько я понимаю, лимит на точки останова будет снят. Рецепт.

 

Пасибо, заценю на досуге, надо только плату подходящую найти.  А отдельно-стоящий стлинк можно каким-нить простым способом перешить?

И кстати какие еще профиты дает эта перешивка?

14 hours ago, rkit said:

Делаешь отдельную пустую функцию, ставишь  в ней брейкпоинт, вызываешь хоть из сотни разных мест.

Не, идея именно чтоб не ставить. Когда код с гита обновляется - все нафиг слетает. Я эту тему не один пилю.

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


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

5 часов назад, Fox_Sanchez сказал:

А отдельно-стоящий стлинк можно каким-нить простым способом перешить?

Простите? Не понимаю вас)

5 часов назад, Fox_Sanchez сказал:

И кстати какие еще профиты дает эта перешивка?

Для меня самый главный - неотваливание связи. Давно заметил, что ST-Link частенько теряет связь с компьютером. Подобная же ситуация проявляется и у моих коллег. J-Link в этом плане по-надёжнее. Но я не могу сказать, что пользуюсь постоянно такой модификацией программатора. Т.к. имеется нормальный сеггеровский J-Link.

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


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

24.11.2020 в 23:20, Fox_Sanchez сказал:

Далее следующий вопрос - как из кода обнаружить наличие отладчика?

Бит C_DEBUGEN в DHCSR.

25.11.2020 в 00:59, Fox_Sanchez сказал:

Тормозит в смысле останавливается. Даже если не в дебаге, а когда просто прошит.

Ну а зачем в релизном коде оставлять эти BKPT?
Если уж так хочется, то разрешите монитор отладки и каждый BKPT будет вызывать исключение Debug Monitor. За подробностями - в ARM на ARMv7-M.

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


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

12 hours ago, Arlleex said:

Бит C_DEBUGEN в DHCSR.

Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню.

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


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

4 часа назад, SII сказал:

Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню.

Здравствуйте! Насколько я понимаю, это бит действительно включает отладку. Но установить его самим процессором нельзя (подчёркнуто). Выходит, что косвенно по нему можно делать вывод, что отладчик подключен. Ведь это он устанавливает и сбрасывает этот разряд. Могу ошибаться.

image.thumb.png.22bf206e9d27c8d59602de316056598e.png

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


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

12 часов назад, SII сказал:

Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню.

Доступ к этому биту строго из AHB-AP, через которую отладчик и подключается.

P.S. Опередили.

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


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

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

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

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

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

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

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

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

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

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