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 задавать и препроцессором проверять тактовую частоту. |