При отладке в AVR Studio иногда невозможно нормально производить пошаговую отладку и просматривать (Watch) значения локальных переменных. Это происходит из-за того, что включена оптимизация кода.
Для того, чтобы исправить положение, нужно эту оптимизацию отключить. Для компилятора avr-gcc.exe (находится в папке c:\WinAVR-20080610\bin\) оптимизация задается опцией -O (с добавками, которые управляют типом оптимизации). У меня, например, была включена опция -Os, что задавало оптимизацию по скорости. Если убрать совсем опцию -O, то оптимизация отключается, что позволит нормально просматривать значения переменных и делать качественную отладку. Но имейте в виду, что объем кода при этом возрастает почти в 2 (!) раза.
Меняются опции компилятора либо через настройки проекта (меню Project -> Configuration Options -> Custom Options), либо в тексте Makefile (если, например, в свойствах проекта стоит галочка "Use External Makefile"). В случае Makefile оптимизация выключается, например, так:
#Строка опций для компилирования с оптимизацией:
CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000UL -Os -fsigned-char
#Строка опций для компилирования без оптимизации
# (тут всего лишь убрана опция -Os):
CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000UL -fsigned-char
Для некоторых файлов, которые не нужно отлаживать пошагово, можно оптимизацию задать отдельно (в секции компиляции модулей Makefile):
timer.o: ../timer.c
$(CC) $(INCLUDES) -Os $(CFLAGS) -c $<
|
Комментарии
Или вы предлагаете так и не включать оптимизацию после отладки для компиляции релиза?
microsin: имеет ли смысл отключать оптимизацию - решает в каждом конкретном случае программист исходя из условий решения задачи. Кто-то отлаживает на коленке (прошил-записал-не заработало), тому оптимизацию незачем выключать, а кто-то отладчиком - тому лучше отлаживать без глюков. Если у Вас памяти в программируемом чипе хватает, и достаточно быстродействия, то оптимизацию можно вообще не использовать. Я ничего не предлагаю, в статье я только рассказал о проблеме и о её решении, а "лечиться или не лечиться" - это только от Вас зависит.
RSS лента комментариев этой записи