IAR: почему нельзя поставить breakpoint |
Добавил(а) microsin |
Может не получиться задать точку останова в исходном коде в следующих случаях: 1. Код скомпилирован в режиме оптимизации. Если оба этих условия выполняются, то можно без проблем использовать точки останова как в исходном коде проекта, так и в двоичных, предварительно скомпилированных библиотеках (файлы с расширением *.a). [Точки останова и компиляция с оптимизацией] Чтобы можно было отлаживать код с точками останова, необходимо для него отключить оптимизацию. В противном случае исходный код не будет точно отражать программные операции микроконтроллера, тогда пошаговая отладка и точки останова не будут работать, как ожидалось. Обычно в проекте для отладки по исходному коду существует отдельная конфигурация Debug. В этой конфигурации оптимизация кода отключена, что позволит отладку по исходному коду: В конфигурации Release оптимизация кода должна быть включена. Примечание: некоторые недопрограммисты всегда компилируют свои проекты с отключенной оптимизацией, им так удобнее. Их не беспокоит, что ресурсы процессора и памяти могут расходоваться впустую. Кроме того, переключение между конфигурациями Debug и Release очень полезно, поскольку позволяет найти грубые ошибки в коде. Также существует удобная опция управлять оптимизацией на уровне отдельных функций с помощью директивы #pragma. Например, если весь проект скомпилирован с оптимизацией, но нам нужно пошагово отладить только одну функцию, то для неё отдельно можно оптимизацию отключить: #pragma optimize=z none
static void commontask(void const * argument) { OBInit(); OBAttachClick(BtnShortPress); GPS_DataLast.Latitude = GPS_DataLast.Longitude = 0.0; RTC_Init(); TDA8551init(); SetDownStatusText((char*)strCheckMessageBase); UpdateAtScreen(SCR_UPDATE_DOWN_STATUS); osDelay(100); ... Директива #pragma optimize=z none будет действовать только на код этой функции. Все остальные функции в проекте получат опции оптимизации, унаследованные от настроек проекта. Подробнее см. [1]. [Добавление в результаты компиляции отладочной информации] Чтобы можно было ставить точки останова в исходном коде, для него должна быть активирована опция генерации отладочной информации. Эта опция находится в настройках проекта, раздел C/C++ Compiler -> закладка Output -> галочка Generate debug information: [Ссылки] |