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

stm32 debug session

Добрый день!

 

Случилась такая вещь: был у меня один девайс на stm32f103. Лежал на столе, я его отлаживал какое-то время назад (Workbench + ST-Link). Отладил, все работает как надо. Тут вдруг по острой нужде его схватили и запихнули в прибор. В общем вопрос такой: во время дебаг-сессии в него шьется обычная прошивка или со всякими отладочными штуками? Надо ли опосля отладки в него перешивать бинарник флэшером отдельно? Все предыдущие разы я так и делал. Сейчас все работает, крышка закрыта, лезть туда не хочется.

 

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


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

Что собрано, то и шьется. Специально заливать по голове то же самое смысла нет.

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


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

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

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


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

Если в проекте было много активных точек останова, то многие IDE и отладчики модифицируют флеш и вставляют программные точки останова.

Это да. Правда, их должно быть действительно много, если не ошибаюсь, у F103 шесть аппаратных точек.

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


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

Ну допустим точек было задействовано всего пару. Это может как-то повлиять на работу? Без подключенного отладчика он не будет из-за чего-либо на них останавливаться?

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


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

Ну допустим точек было задействовано всего пару. Это может как-то повлиять на работу? Без подключенного отладчика он не будет из-за чего-либо на них останавливаться?

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

Останавливаться - с чего бы? Программная точка - это инструкция программного прерывания, записанная поверх штатных инструкций. Сами подумайте что будет.

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


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

Ответ находится за 5 минут с использованием устройства, отладчика, головы и рук.

Гугл можно не привлекать для экономии времени.

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


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

я как-то точно оставлял точки останова при отладке, потом штатно выходил, отключал СТ-Линк.

Потом запускал устройство и оно работало адекватно, не висло в предполагаемых местах остановки..

Отлаживал Кейлом.

 

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


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

Придется поднять тему.

Использую Keil + ST-Link (SWD).

Захожу в сессию отладки, ставлю до 6 точек останова - все устанавливается (они аппаратные). А я хочу больше точек останова - допустим, 100 точек. Пусть из них 6 будут аппаратными, остальные - программными. Как это сделать? Нужно как-то перекомпилировать код? В какой момент подключается Flash Patch и как он точно работает? Я полагаю, что это некий механизм переадресации инструкций, на которые поставлены точки останова, на инструкции в той же Flash, но находящиеся недалеко от исполняемого реального кода. И это инструкции BKPT с параметром.

268182_20151113183626150_879939898.png

 

И если расставляются программные точки останова, означает ли это, что они расставляются в процессе до компиляции и добавляются в код? И как не пытался играться в Keil, поставить ST-Link-ом программную точку не смог =(

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

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


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

И если расставляются программные точки останова, означает ли это, что они расставляются в процессе до компиляции и добавляются в код?

Нет, точки ставит отладчик, в код ничего не добавляется, только в таргет.

 

P.S. Картинку не видно

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


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

Нет, точки ставит отладчик, в код ничего не добавляется, только в таргет.

 

P.S. Картинку не видно

Картинку переприкрепил.

 

И вот судя по ней, когда ставится программная точка останова, адрес считываемой инструкции, на которую натравливается точка останова, слегка корректируется на инструкцию BKPT (ну это мне так пока что приходится догадываться). Но если это не так, тогда отладчику надо как-то "налету" поменять содержимое инструкции на BKPT прямо во Flash (код исполняется оттуда). А для этого память надо сначала будет стереть, а потом перезаписать ради одной инструкции. После выхода из сессии отладки снова перешить Flash на корректный код... Выглядит как-то костыльно, либо не так это все работает :laughing:

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


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

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

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

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

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

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

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

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

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

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