Fox_Sanchez 1 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба Добрый день! Есть STM32F4, ST-Link и CubeIDE. Подскажите, возможно ли со стороны контроллера остановить выполнение под отладчиком? Например какая-нить затычка обработчика ошибок. Сейчас там while(1) и пока не ткнешь на паузу в ИДЕ - не понятно чего происходит. А хочется этот while заменить на команду остановки, чтоб ИДЕ показало что мы тут зависли. Тратить на это брякпоинт не хочется, их и так мало. Да и слетают они после редактирования кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба в cmsis есть inline-asm обертка __BKPT(); вокруг ассемблерной функции bkpt. Кстати, while(1) не самое удачное решение. Вот тут описывал более практичное. Если объединить его с вашей идеей использования там внутри инструкции bkpt - будет "ваще огонь". Пошел править свою библиотеку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fox_Sanchez 1 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба Пасибо, проверил - работает! Это ж можно условные брякпоинты делать и ассерты нормально оформлять без вывода! Но есть нюанс - проц на этой штуке тормозит даже без отладчика. Так что не везде она применима. Как вариант - делать условную компиляцию для отладки. А про while - я обычно делаю Run->Move to line за ним и норм все выходит. Далее следующий вопрос - как из кода обнаружить наличие отладчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба Приветствую. А что собственно делает 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. Попробовал -> не смог. Видать не так понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fox_Sanchez 1 24 ноября, 2020 Опубликовано 24 ноября, 2020 · Жалоба Тормозит в смысле останавливается. Даже если не в дебаге, а когда просто прошит. А про while(1) в вашем случае компилятор скорее всего просто выкинул все что за ним находится. Если оно будет не просто в коде, а под условием - выпрыгивает без проблем. Чтобы не понять неправильно - во время остановки ставлю курсор на желаемую строку и жму меню Run->Move to line. Так можно принудительно запускать выполнение нужных частей кода или обходить какие-нить условия. Но пользоваться надо осторожно, можно перепрыгнуть инициализацию переменной или еще что-нить важное и потом долго думать как так получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 25 ноября, 2020 Опубликовано 25 ноября, 2020 (изменено) · Жалоба 6 часов назад, Fox_Sanchez сказал: ST-Link Простите, что не совсем по теме, но почему бы вам не превратить ST-Link в J-Link? Насколько я понимаю, лимит на точки останова будет снят. Рецепт. Изменено 25 ноября, 2020 пользователем MrBearManul Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 25 ноября, 2020 Опубликовано 25 ноября, 2020 · Жалоба 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) так не работает. Хотя было бы очень удобно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 25 ноября, 2020 Опубликовано 25 ноября, 2020 · Жалоба Делаешь отдельную пустую функцию, ставишь в ней брейкпоинт, вызываешь хоть из сотни разных мест. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fox_Sanchez 1 25 ноября, 2020 Опубликовано 25 ноября, 2020 · Жалоба 17 hours ago, MrBearManul said: Простите, что не совсем по теме, но почему бы вам не превратить ST-Link в J-Link? Насколько я понимаю, лимит на точки останова будет снят. Рецепт. Пасибо, заценю на досуге, надо только плату подходящую найти. А отдельно-стоящий стлинк можно каким-нить простым способом перешить? И кстати какие еще профиты дает эта перешивка? 14 hours ago, rkit said: Делаешь отдельную пустую функцию, ставишь в ней брейкпоинт, вызываешь хоть из сотни разных мест. Не, идея именно чтоб не ставить. Когда код с гита обновляется - все нафиг слетает. Я эту тему не один пилю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 26 ноября, 2020 Опубликовано 26 ноября, 2020 · Жалоба 5 часов назад, Fox_Sanchez сказал: А отдельно-стоящий стлинк можно каким-нить простым способом перешить? Простите? Не понимаю вас) 5 часов назад, Fox_Sanchez сказал: И кстати какие еще профиты дает эта перешивка? Для меня самый главный - неотваливание связи. Давно заметил, что ST-Link частенько теряет связь с компьютером. Подобная же ситуация проявляется и у моих коллег. J-Link в этом плане по-надёжнее. Но я не могу сказать, что пользуюсь постоянно такой модификацией программатора. Т.к. имеется нормальный сеггеровский J-Link. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 26 ноября, 2020 Опубликовано 26 ноября, 2020 · Жалоба Тянуть брейкпоинты с гита это вообще кошмар какой-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 26 ноября, 2020 Опубликовано 26 ноября, 2020 · Жалоба 24.11.2020 в 23:20, Fox_Sanchez сказал: Далее следующий вопрос - как из кода обнаружить наличие отладчика? Бит C_DEBUGEN в DHCSR. 25.11.2020 в 00:59, Fox_Sanchez сказал: Тормозит в смысле останавливается. Даже если не в дебаге, а когда просто прошит. Ну а зачем в релизном коде оставлять эти BKPT? Если уж так хочется, то разрешите монитор отладки и каждый BKPT будет вызывать исключение Debug Monitor. За подробностями - в ARM на ARMv7-M. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 26 ноября, 2020 Опубликовано 26 ноября, 2020 · Жалоба 12 hours ago, Arlleex said: Бит C_DEBUGEN в DHCSR. Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 27 ноября, 2020 Опубликовано 27 ноября, 2020 · Жалоба 4 часа назад, SII сказал: Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню. Здравствуйте! Насколько я понимаю, это бит действительно включает отладку. Но установить его самим процессором нельзя (подчёркнуто). Выходит, что косвенно по нему можно делать вывод, что отладчик подключен. Ведь это он устанавливает и сбрасывает этот разряд. Могу ошибаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 27 ноября, 2020 Опубликовано 27 ноября, 2020 · Жалоба 12 часов назад, SII сказал: Этот бит указывает на разрешение использовать отладчик, но не на факт присутствия отладчика, насколько помню. Доступ к этому биту строго из AHB-AP, через которую отладчик и подключается. P.S. Опередили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться