如何在Mac和Linux上从命令行编译和上传Arduino sketches?我已经安装了Arduino编程环境。在任何地方都有一些样品制作文件吗?
答案 0 :(得分:39)
有一个名为Ino的命令行Arduino工具包。它只是这样做。
答案 1 :(得分:12)
从命令行(在Windows,Mac和Linux上)编译和上传草图(与C / C ++源相关)直接通过自1.5.0以来的arduino可执行文件的标志支持。
可以使用arduino --upload [sketch.ino]
答案 2 :(得分:8)
这是我的模板gnu make包含AVR项目,您可能需要调整其中的一些以适应您的环境。它创建了依赖项,有许多标准的gcc选项,我发现它们很有用或者可以优化大小,以及我使用的库目录。我成功地使用它来编译arduino软件,我之前也在arduino编辑器中攻击了PdePreprocessor,从命令行运行以生成所有的巫术:
https://github.com/wesen/mididuino/blob/master/app/src/processing/app/preproc/PdePreprocessor.java
#
# generic AVR makefile
#
# (c) July 2011 - Manuel Odendahl - wesen@ruinwesen.com
#
# include this into your main Makefile, after having defined TARGET and TARGET_OBJS
all: $(TARGET).hex
CURDIR := $(dir $(lastword $(MAKEFILE_LIST)))
include $(CURDIR)MidiCtrl.mk
CC = avr-gcc
CXX = avr-g++
OBJCOPY = avr-objcopy
AVR_ARCH ?= atmega64
LDAVR_ARCH ?= avrmega64
FLASH_PROTOCOL = jtag2
CFLAGS += -Os -ffunction-sections -DAVR -I. -mmcu=$(AVR_ARCH) -mcall-prologues -fshort-enums -fpack-struct -Wall -Werror
CFLAGS += -Wall -DLITTLE_ENDIAN -g -flto
CFLAGS += no-tree-loop-optimize -ffreestanding -morder1 -funsigned-char -funsigned-bitfields -fshort-enums -fpack-struct
CFLAGS += -fdata-sections -fno-split-wide-types -fno-inline-small-functions -mcall-prologues
CLDFLAGS += -Wl,--relax,--gc-sections -ffunction-sections
CLDFLAGS += -mmcu=$(AVR_ARCH)
LDFLAGS = -m $(LDAVR_ARCH) -M
# generate list
# CFLAGS += -Wa,-adhlns=$@.lst
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.s
$(CC) $(CFLAGS) -c $< -o $@
%.s: %.c
$(CC) -S $(CFLAGS) -fverbose-asm $< -o $@
%.o: %.S
$(CC) $(CFLAGS) -c $< -o $@
%.syx: %.hex
ihex2sysex $< $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.ee_srec: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
AVR_BASE_DIR ?= $(abspath $(CURDIR)..)
AVR_LIB_DIR ?= $(AVR_BASE_DIR)/hardware/libraries
AVR_LIBS += CommonTools Midi
AVR_LIB_DIRS += $(foreach lib,$(AVR_LIBS),$(AVR_LIB_DIR)/$(lib))
AVR_INC_FLAGS += $(foreach dir,$(AVR_LIB_DIRS),-I$(dir))
AVR_OBJS += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(wildcard $(dir)/*.cpp),$(subst .cpp,.o,$(file))))
AVR_OBJS += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(filter-out $(AVR_HOST_EXCLUDE),$(wildcard $(dir)/*.c)),$(subst .c,.o,$(file))))
AVR_DEPS += $(subst .o,.d,$(AVR_OBJS))
# AVR_HOST_EXCLUDE can be used to exclude specific files later on
CXXFLAGS += $(AVR_INC_FLAGS)
CFLAGS += $(AVR_INC_FLAGS)
CXXFlags += -Werror -Wall
CFLAGS += -Werror -Wall
default: all
%.d:%.c
set -e; $(CC) -MM $(CFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.d:%.cpp
set -e; $(CXX) -MM $(CXXFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.host.d:%.c
set -e; $(CC) -MM $(CFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
%.host.d:%.cpp
set -e; $(CXX) -MM $(CXXFLAGS) $< \
| sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
[ -s $@ ] || rm -f $@
printlibs:
echo $(AVR_LIBS)
$(TARGET).elf: $(TARGET).o $(TARGET_OBJS) $(AVR_OBJS)
$(CXX) $(CLDFLAGS) -g -o $@ $^
_clean:
- rm *.elf *.hex *.o .midictrl.flags
libclean:
rm -rf $(TARGET_OBJS) $(OBJS)
# concrete settings for development environment
UNAME=$(shell uname)
ISWIN=$(findstring CYGWIN,$(UNAME))
ISMAC=$(findstring Darwin,$(UNAME))
CC = avr-gcc
CXX = avr-g++
OBJCOPY = avr-objcopy
AVR_ARCH = atmega64
F_CPU = 16000000L
CORE = minicommand2
答案 3 :(得分:5)
您需要从arduino草图中实际创建一个可行的cpp文件。 arduino环境会自动为您完成。获取这些文件的一个技巧是打开你的arduino preferences.txt(它在mac上的〜/ Library / Arduino中,我认为在你的文档和设置或Windows上的应用程序数据中,不记得确切),并设置构建.verbose = true,upload.verbose = true。启动arduino,编译草图(不要上传)。底部的控制台将显示编译的文件。您现在可以转到该目录,该目录将包含cpp文件,以及所有核心arduino对象的编译目标文件。您可以将这些复制到项目中并使用cpp文件进行进一步的黑客攻击。如果您需要有关Makefile的更多信息,请告诉我,我可以为您提供我所拥有的信息。
答案 4 :(得分:3)
您可以使用基于CMake的biicode(我正在工作的项目)(但您实际上并不需要编写任何cmake文件),而且管理Arduino库的工具
它的主要特点是:
您可以在here中看到快速演示documentation并阅读更多内容。
答案 5 :(得分:2)
如果您可以使用cmake,那么同一网站中会有一些链接(例如this和this)。 GNU makefile与cmake略有不同,但并不复杂。只是谷歌一点,你可以找到很多Makefile示例如何编译AVR代码。
答案 6 :(得分:2)
您实际上可以使用arduino GUI进行编译和上传,并在首选项中将编辑器设置为外部。这样,您可以从xcode编辑C ++(PDE)文件,并让arduino生成实际的CPP并构建整个shebang。
您还可以使用XCode使用avr-gcc编译器为arduino编写普通的C ++ / C.
查看:https://stackoverflow.com/a/8192762/153835
然后,您可以使用普通的avrdude上传工具对arduino进行编程。看看:http://www.ladyada.net/library/arduino/bootloader.html
过去,Arduino所说的协议是对STK500协议的修改,只有与arduino捆绑在一起的avrdude才能说出来。我不知道主流avrdude是否已经升级,或者你是否仍然需要使用Arduino文件夹中的avrdude。
答案 7 :(得分:2)
我很喜欢Platformio。它还具有Visual Studio Code的扩展,因此您可以从那里进行所有操作。它具有内置的库管理器和上载器。
我的设置是一个NFS驱动器,在其中我有代码,安装在linux笔记本电脑上,还安装在Arduino旁边的Raspberry Pi上。
当需要编译时,我在笔记本电脑上进行编译,由于RPi在Arduino旁边,因此我从那里进行上传。
安装和配置后,基础很简单; 'platformio run'将编译您的代码。 “ platformio run -t上载”将编译并上载。
我还具有无需编译即可上传的bash函数;
function th(){
if [ "${1}" = "upload" ];then
if [ ! -f platformio.ini ]; then
echo platformio.ini not found
else
UPLOAD_PORT=`cat platformio.ini | grep upload_port | awk '{print $3}'`
if [ "${UPLOAD_PORT}" = "" ]; then
echo no upload port
else
if [ "${2}" != "" ]; then
FIRMWARE=${2}
else
#the firmware location seems to have moved
# FIRMWARE='.pioenvs/megaatmega2560/firmware.hex'
FIRMWARE='.pio/build/megaatmega2560/firmware.hex'
fi
if [ -f "${FIRMWARE}" ]; then
avrdude -v -p atmega2560 -C /home/stevenk/.platformio/packages/tool-avrdude/avrdude.conf -c wiring -b 115200 -D -P "${UPLOAD_PORT}" -U flash:w:$FIRMWARE:i
else
echo ${FIRMWARE} not found
fi
fi
fi
else
wget --timeout 8 -qO- http://192.168.178.212/$1
fi
}
答案 8 :(得分:1)
我有一个makefile for Arduino,可用于编译和上传Arduino(或普通AVR C)程序到Arduino。
以下是此makefile的一些重要功能
答案 9 :(得分:1)
arduino团队正在开发 cli 客户 https://github.com/arduino/arduino-cli
公告:https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
$ arduino-cli Arduino Command Line Interface (arduino-cli).
Usage: arduino-cli [command]
Examples: arduino <command> [flags...]
Available Commands:
board Arduino board commands.
compile Compiles Arduino sketches.
config Arduino Configuration Commands.
core Arduino Core operations.
help Help about any command
lib Arduino commands about libraries.
sketch Arduino CLI Sketch Commands.
upload Upload Arduino sketches.
version Shows version number of Arduino CLI.
答案 10 :(得分:1)
有一个官方的 Arduino CLI 工具:
https://blog.arduino.cc/2021/02/15/arduino-cli-0-16-0-is-ready-for-you-all/?queryID=undefined
在我看来,它工作得很好。 GitHub 存储库在这里:
https://github.com/arduino/arduino-cli
它的版本是 0.16.0。所以有点测试版,但不是真的......
答案 11 :(得分:0)
如果你不坚持制作,那么还有scons / sconstruct scons/sconstruct。因为这基本上是用Python编写的,所以调整比make更简单。此外,它可以使用任何Python调试器进行调试。