Программирование AVR: решение проблем, FAQ Как в проекте AVR Studio + gcc добиться нормальной отладки Wed, October 18 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Как в проекте AVR Studio + gcc добиться нормальной отладки Печать
Добавил(а) microsin   

При отладке в 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  $<

 

 

Комментарии  

 
0 #1 Мааковеюшко 07.07.2010 11:28
Имеет ли это смысл? Ведь мы будем отлаживать не тот код который будем эксплуатировать .

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

microsin: имеет ли смысл отключать оптимизацию - решает в каждом конкретном случае программист исходя из условий решения задачи. Кто-то отлаживает на коленке (прошил-записал-не заработало), тому оптимизацию незачем выключать, а кто-то отладчиком - тому лучше отлаживать без глюков. Если у Вас памяти в программируемом чипе хватает, и достаточно быстродействия, то оптимизацию можно вообще не использовать. Я ничего не предлагаю, в статье я только рассказал о проблеме и о её решении, а "лечиться или не лечиться" - это только от Вас зависит.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page