Я хотел бы написать свои эскизы, чтобы я мог их собрать / загрузить с помощью Arduino IDE или, опционально, с помощью GCC и make-файла.
Я знаю о включении объявлений функций вверху, но есть ли что-то еще, чтобы мой эскиз считался допустимым C ++ моим компилятором?
Обновление 1
Понимание того, что Arduino IDE делает с файлами .ino и .pde, хорошо, но не имеет значения для моего вопроса, так что это не дубликат. Что я хочу знать, так это «как написать программу так, чтобы она считалась действительной как в Arduino IDE, так и в g ++.
Официальный (?) Make-файл, доступный здесь, объясняет, что делать, если использовать make-файл вместо IDE:
# The Arduino environment does preliminary processing on a sketch before
# compiling it. If you're using this makefile instead, you'll need to do
# a few things differently:
#
# - Give your program's file a .cpp extension (e.g. foo.cpp).
#
# - Put this line at top of your code: #include <WProgram.h>
#
# - Write prototypes for all your functions (or define them before you
# call them). A prototype declares the types of parameters a
# function will take and what type of value it will return. This
# means that you can have a call to a function before the definition
# of the function. A function prototype looks like the first line of
# the function, with a semi-colon at the end. For example:
# int digitalRead(int pin);
... но это не объясняет , как использовать как интегрированную среду разработки и Makefile.
Обновление 2
Недавно я нашел PlatformIO, который не отвечает на этот вопрос напрямую, но автоматизирует большую часть процесса (генерирует файлы Scons для вас), и до сих пор я предпочитаю рабочий процесс как в среде Arduino IDE, так и в методе source + makefile. Хорошая поддержка со стороны авторов.
источник
Ответы:
Под gcc / g ++ я думаю, что вы имеете в виду именно avr-gcc / avr-g ++. Ваш код arduino, вероятно, не будет считаться допустимым кодом C / C ++, потому что gcc попытается скомпилировать ваш компьютер в качестве целевой системы. Многие из макросов в «WProgram.h» будут ссылаться на недоступную память в вашей целевой системе.
Если вы включите заголовочный файл "WProgram.h" и соберете свой код с помощью Arduino Makefile выше (который использует avr-g ++, а не g ++), ваши cpp-файлы должны правильно компилироваться и связываться. Кроме того, вы сможете открыть свой код Arduino в IDE и проверить там свой код. IDE помещает в файл "WProgram.h", так что технически он будет включен дважды. Тем не менее, встроенные средства защиты предотвратят компиляцию любого дублирующего кода.
источник
Как правило , вам нужно сформулировать
setup()
иloop()
функции, они просто обертки в IDE:Это работает как в IDE, так и в командной строке. Так как вы указываете Board и SerialPort в IDE, вам также необходимо указать оба в Makefile. Таким образом, вы получите две конфигурации.
Многие люди покидают IDE, потому что они предпочитают использовать разные редакторы или имеют больше параметров конфигурации, устанавливая переключатели компилятора и компоновщика.
Чтобы сделать это действительно легко, вы можете использовать Arduino Makefile . Сегодня снялся с 347.
Вот пример Makefile:
Файлы * .ino не нужно менять, и
Makefile
файл должен быть помещен в тот же каталог.Между тем я предпочитаю
Makefile
способ, но я все еще использую IDE для небольших проектов.источник
См .: Как избежать причуд предварительной обработки файла эскиза IDE .
Не обращая внимания на момент, как будет выглядеть Makefile, простой ответ на ваш вопрос, который обсуждался в приведенной выше ссылке, состоит в том, чтобы поместить все данные на вкладки .cpp и .h в IDE и оставить основной «скетч» (.ino файл) пустым. Это все равно будет компилироваться в среде IDE, и, следовательно, также будет обычным C ++.
Убедитесь, что вы начинаете свои .cpp файлы с:
Если вы используете библиотеки (например, SPI), вы должны включить их в основной файл эскиза, который запускает среду IDE, чтобы скопировать их во временный файл сборки проекта. Makefile не будет заботиться об этом, так как вы убедитесь, что ваш Makefile включает в себя все необходимые файлы библиотеки.
Также смотрите мой ответ здесь: Классы и объекты: сколько и какие типы файлов мне действительно нужны, чтобы их использовать?
источник