Может не получиться задать точку останова в исходном коде в следующих случаях:
1. Код скомпилирован в режиме оптимизации. 2. В скомпилированный код не попала отладочная информация.
Если оба этих условия выполняются, то можно без проблем использовать точки останова как в исходном коде проекта, так и в двоичных, предварительно скомпилированных библиотеках (файлы с расширением *.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:
[Ссылки]
1. Управление оптимизацией в IAR. |
Комментарии
RSS лента комментариев этой записи