§ Шаблона makefile
Компиляция под стандартный микроконтроллера AtMega328.# https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html DEVICE = atmega328 OPTIONS = -Os -DF_CPU=25000000 -mmcu=$(DEVICE) -std=c++11 INCLUDE = -I.. -Iinclude WARNING = -Wall -Wno-unused-but-set-variable LINKER = -fdata-sections -Wl,--gc-sections,--defsym=__stack=0x80efff,--defsym=__heap_end=0x80efff COMPILE = avr-gcc $(INCLUDE) $(WARNING) $(OPTIONS) $(LINKER) AVR = avr_machine all: $(COMPILE) main.cc -o main.elf avr-objcopy -j .text -j .data -O binary main.elf main.bin avr-objdump -S main.elf > main.lst avr-size -C --mcu=$(DEVICE) main.elf > mem.map rm main.elf $(AVR) main.bin clean: rm -f *.o rm *.elf *.lst *.bin *.map
§ main.cc
#include <avrio.h> ISR(INT0_vect) { } int main() { for (;;); }
§ Файл avrio.h
/* * Этот файл покрыт различными некультурными лицензиями и не собирается * на этом останавливаться! LICENSE NO WARRANTY COPYRIGHT TRADEMARK RIGHTS * звучит очень круто, как-то не по-нашему, ну вы понимаете, да! */ #ifndef __AVRIO_GENERIC_FILE #define __AVRIO_GENERIC_FILE #include <avr/pgmspace.h> #include <avr/interrupt.h> // Пример как пользоваться: LPM(my_best_array[i]) #define LPM(t) pgm_read_byte(&t) #define LPW(t) pgm_read_word(&t) // Базовые типы данных typedef unsigned char byte; typedef unsigned int word; typedef unsigned long dword; // Чтение|запись в порты inline byte inp(byte port) { return ((volatile byte*) 0x20)[port]; } inline void out(byte port, byte val) { ((volatile byte*) 0x20)[port] = val; } // Объявление указателя на память (имя x, адрес a) #define heap(x, a) byte* x = (byte*) a #endif
§ Устройства
DEVICE ROM RAM EEPROM atmega328 32k 2048 1024 attiny85 8k 512 512Если выбран attiny85
LINKER = -fdata-sections -Wl,--gc-sections,--defsym=__stack=0x80025f,--defsym=__heap_end=0x80025f
3 сен, 2021
© 2007-2023 Муть в том, что Жириновский плывет под водой