avr-gcc: как в Makefile задавать и препроцессором проверять тип используемого AVR Печать
Добавил(а) microsin   

В проектах AVR Studio + AVR GCC (из пакета WinAVR) часто используют Makefile, в котором задается тип микроконтроллера AVR. В тексте программы бывает нужно с помощью препроцессора проверить, какой сейчас задан тип процессора, и в зависимости от этого выбрать нужный текст для компиляции.

Обычно тип процессора задается в Makefile таким способом:

#MCU = atmega8
MCU = atmega16
#MCU = atmega48
...
COMMON = -mmcu=$(MCU)
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000UL -fsigned-char
...
## Compile
main.o: ../main.c
    $(CC) $(INCLUDES) $(CFLAGS) -c  $<

Чтобы задать тип процессора, раскомментируют одну из строчек "MCU = ..", и потом тип процессора передается компилятору через переменную мейк-файла CFLAGS и опцию -mmcu. В тексте программы необходимо включить файл avr/io.h, который проверяет тип процессора и в зависимости от него включает нужные заголовочные файлы.

Чтобы в программе самому проверить тип микроконтроллера с помощью препроцессора avr-gcc, нужно добавить код наподобие следующего:

#if defined (__AVR_ATmega8__)
    //тут код для ATmega8
    ..
#elif defined (__AVR_ATmega16__)
    //тут код для ATmega16
    ..
#elif defined (__AVR_ATmega48__)
    //тут код для ATmega48
    ..
#else
    #error "device type not defined"
#endif

Имена макросов типа __AVR_ATmega8__, __AVR_ATmega16__ и т. д. можно подсмотреть в файле c: \ WinAVR-20090313 \ avr \ include \ avr \ io.h. Имена макросов жестко вшиты в исполняемый файл avr-gcc (см. c: \ WinAVR-20090313 \ libexec \ gcc \ avr \ 4.3.2 \ cc1.exe, cc1obj.exe, cc1plus.exe), прочитать про их использование можно в файле c: \ WinAVR-20090313 \doc \avr-libc \avr-libc-user-manual \ using_tools.html.

Для Atmel Toolchain (используется в Atmel Studio 6) файл io.h находится в папке c: \ Program Files \ Atmel \ Atmel Studio 6.0 \ extensions \ Atmel \ AVRGCC \ 3.3.2.31 \ AVRToolchain \ avr \ include \ avr.

[Ссылки]

1. avr-gcc: как в Makefile задавать и препроцессором проверять тактовую частоту.
2Как устроен Makefile и что это такое?