Keil uVision 5: Не работает пошаговая отладка в исходном коде!

Как это часто бывает, многие из нас очень любят настраивать workflow под себя, в каждом приложении. И зачастую не вдаёмся в подробности, а так же не запоминаем что и где изменили. Так и в данном случае, решив поиграться с настройками проекта и отладки, «настроил» я Keil под себя… и внезапно у меня перестал шагать отладчик по исходному коду. Работать работает, но шагает и брэйкпоинты ставить даёт только в дизассемблинг области. «Ну да ладно.....» — подумал я, и поначалу забил на это дело. Но через пару дней работы над заказом мне надоело постоянно переключаться в режим симуляции и обратно. К тому же всё что работает в симуляторе не всегда работает в железе, думаю многие об этом знаю уже не понаслышке.

Так вот вдоволь намучившись, я решил разобраться в чём проблема. Причём это проблема сопровождала только один проект. Все остальные работали в режиме отладке без нареканий. После долгих поисков решения в сети, я наткнулся на комментарии на форуме Keil-а. Который и помог мне в решении этого вопроса. Но так, как я достаточно долго искал решение, и за это время прочитал очень много рекомендаций, то решил их все собраться в одном месте. Итак начнём…

В первую очередь в свойствах проекта(Alt+F7), на вкладке «Debug», проверить наличие галок в пунктах «Load Application at Statup» и «Run to main()». Они нужны чтобы отладчик при старте проходил до функции main(). Это сделано для удобства отладки и быстрого перехода к пользовательскому коду.



далее переходим в настройки отладчика/программатора:



на первой же вкладке(Debug) проверяем отсутствие галок «Verify Code Download» и «Download to Flash» в области «Download Options». Эти функции отвечают за использование встроенного загрузчика кода в J-Link-ах(https://www.segger.com/products/debug-probes/j-link/technology/ides/keil-mdk/). К слову, у меня эти функции были включены мной по не знанию. Как оказалось встроенный загрузчик Segger не умеет запускать код из flash-памяти устройства.



ну и последнее, проверить галку «Update Target before Debugging», во вкладке «Utilies», свойств проекта. Насколько я понял, он отвечает за загрузку прошивки в МК. Но не смотря на это, я всё равно перед отладкой всегда нажимаю F8, чтобы прошить скомпилированный файл в устройство.



На этом всё. Успешных разработок!