РадиоКот :: Сборка программы для AVR микроконтроллера в Linux Debian
Например TDA7294

РадиоКот >Статьи >

Теги статьи: Добавить тег

Сборка программы для 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

Ну вот и всё, удачи!

 

 



Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

2 2 4