![]() |
|
![]() |
![]() |
Теги статьи: |
Сборка программы для AVR микроконтроллера в Linux Debian
Автор: PavelAtr
Опубликовано 22.08.2023
Создано при помощи КотоРед.
Я давний пользователь Linux Debian. Когда я начал заниматься программированием AVR микроконтроллеров, то поначалу мне пришлось пересесть на Windows. Но со временем мне стало интересно, можно ли это все под Linux?
Итак у меня на Windows каталог с *.c и с *.h фалами программы на C, написанные в Microchip Studio. Надо это все собрать под управлением Linux Debian.
Для начала установим компилятор и библиотеки:
sudo apt install gcc-avr binutils-avr avr-libc elfutils
Теперь вернемся к нашему каталогу с сишными и заголовочными файлами и сделаем маленький toolchain. Наши исходные файлы с Windows переносом строк, но это не помешает. Кто захочет, можете их почистить под Linux стиль, я это описывать не буду. Создадим конфигурационный файл с переменными компиляции:
cross.cfg:
export CC=avr-gcc
export LD=avr-ld
export OBJCOPY=avr-objcopy
export OBJDUMP=avr-objdump
export STRIP=avr-strip
export CFLAGS="-mmcu=atmega8 -D__AVR_ATmega8__ -O2"
Он подключается в текущий shell командой
. cross.cfg
и мы готовы компилировать с нашими переменными окружения.
Здесь "-mmcu=atmega8" задает компилятору архитектуру процессора, возможные варианты можно посмотреть командой:
avr-gcc --target-help | less
в разделе "Известные имена микроконтроллеров".
"-D__AVR_ATmega8__" - директива препроцессора настраивающая заголовочные файлы под наш процессор. Возможные варианты можно например подсмотреть в
less /usr/lib/avr/include/avr/io.h
Теперь осталось немного, надо написать в нашем каталоге программы универсалдьный Makefile (замените <tab> табуляцию).
Makefile:
PROGNAME=Myprogram
firmware: executables
<tab>$(OBJCOPY) -O ihex -j .text -j .data -j .bss -S $(PROGNAME).elf $(PROGNAME).hex
<tab>$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex $(PROGNAME).elf $(PROGNAME).eep || exit 0
<tab>$(OBJDUMP) -h -S $(PROGNAME).elf > $(PROGNAME).lss
<tab>eu-size $(PROGNAME).elf
executables: objects
<tab>$(CC) $(LDFLAGS) *.o -o $(PROGNAME).elf
objects:
<tab>$(CC) $(CFLAGS) -c *.c
clean:
<tab>rm -f *.o
<tab>rm -f $(PROGNAME).elf
<tab>rm -f $(PROGNAME).eep
<tab>rm -f $(PROGNAME).hex
<tab>rm -f $(PROGNAME).lss
Для сборки проекта выполним
make
Также видно в последних строчках вывода распределение памяти.
Для очистки выполним
make clean
Ну вот и всё, удачи!
Все вопросы в Форум.