Розуміння процесу компіляції / зв’язування / завантаження (тому мені не потрібно використовувати IDE)


10

Я почав грати з ардуїно UNO зовсім недавно (без попереднього досвіду роботи з мікроконтролерами). Я хотів би використовувати emacs замість IDE, і я також хотів би знати, що IDE робить під кришкою, щоб мати можливість написати власний makefile. Підручники, які я знайшов, або застаріли, або подаються у вигляді серії кроків без будь-яких пояснень. Буду вдячний, якби хтось міг пояснити мені, як працює весь процес дотримання / зв’язування / завантаження, використовуючи gcc-avr та avr-dude, і як він використовується IDE.


5
Ви можете подивитися під кришкою, натиснувши "Показати багатослівний вихід під час: ☑ компіляції ☑ завантаження" у меню Файл → Налаштування.
jippie

Майже дублікат: компілювання коду через термінал . Дивіться посилання на ардуїно-будівельника та Судара Муту 'Makefile у моїй відповіді на це запитання.
Едгар Боне

Відповіді:


12

Якщо ви хочете точно дублювати те, що робить IDE, але ви хочете, щоб він керувався з командного рядка, саме для цього і є Ino . Повноцінний процес збирання Arduino включає в себе копіювання багатьох файлів з багатьох місць і, як правило, не дурне для копіювання.

Якщо ви готові відпустити файли .ino та бібліотеки Arduino, ви отримаєте набагато простіший набір інструментів. компілюється avr-gcc, завантажує avrdude, і ви закінчили. Ось один із моїх файлів з простого проекту:

CC=avr-gcc
CXX=avr-c++
CXXFLAGS=-Wall -Wextra -mmcu=atmega1284p -Os
CFLAGS=$(CXXFLAGS)
BINARY=ledmatrix
OBJECTS=

all: $(BINARY)
@avr-size $<

$(BINARY): $(OBJECTS)

clean:
@rm -f $(BINARY) $(BINARY).hex $(OBJECTS)

upload: $(BINARY).hex
@avrdude -c usbasp -p m1284p -U flash:w:$<:i

%.hex: %
@avr-objcopy -j .text -j .data -O ihex $< $@

.PHONY: all clean upload

Якщо ви копіюєте та вставляєте, не забудьте замінити всі "↹" символами вкладки.

Редагувати:

Я створив сховище зі своєю збірною системою на Github .


Дякую, ваш makefile - це майже те, що я намагався придумати. Але я думаю, що позбутися бібліотек означає, що я не зможу використовувати такі функції, як digitalWrite ()? У такому випадку, куди мені шукати, щоб дізнатися їхні звичайні еквіваленти С?
Еш

1
Бібліотеки Arduino містили б їх еквіваленти, але читати їх можна трохи ерудовано. Я рекомендую знайти навчальний посібник для низьких рівнів AVR, щоб пропрацювати це, що пояснить вам різні регістри та периферійні пристрої. О, і аркуш. Завжди отримуйте аркуш даних.
Ігнасіо Васкес-Абрамс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.