Как написать make-совместимые эскизы?

Я хотел бы написать свои эскизы, чтобы я мог либо создавать, либо загружать их с помощью Arduino IDE, либо, возможно, используя GCC и make-файл.

Я знаю о включении деклараций функций вверху, но есть ли что-нибудь еще, чтобы мой эскиз считался допустимым C ++ моим компилятором?

Обновление 1

Понимание того, что делает IDE Arduino для файлов .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);

... но это не объясняет, как использовать как IDE, так и make-файл.

Обновление 2

Недавно я нашел PlatformIO, который не отвечает на этот вопрос напрямую, но автоматизирует много процесса (генерирует файлы Scons для вас), и до сих пор я предпочитаю рабочий процесс как по IDE Arduino, так и по методу source + makefile. Хорошая поддержка со стороны авторов.

9 голосов | спросил hoosierEE 2 Maypm14 2014, 17:30:23

3 ответа


1

По 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» для вас, поэтому технически он будет включен дважды. Тем не менее, включенные охранники будут препятствовать компиляции любого повторяющегося кода.

ответил Sean 5 J000000Saturday14 2014, 16:36:58
1

Как правило, вам нужно указать функции setup() и loop(), они просто обертки среды IDE:

void setup() {}
void loop() {}

int main() {
  setup();
  while (1)
    loop();

  return 0; // never reached
}

Это работает как в среде IDE, так и в командной строке. Когда вы указываете Board и SerialPort в среде IDE, вам также нужно указать оба в Makefile. Таким образом, вы получите две конфигурации.

Многие люди покидают среду IDE, потому что предпочитают использовать разные редакторов или больше параметров конфигурации, установив компилятор и компоновщик.

Чтобы сделать это очень просто, вы можете использовать Arduino Makefile . Cегодня снялся с 347.

Вот пример Makefile:

# try: make help
#
include /usr/share/arduino/Arduino.mk
ARDUINO_DIR = /usr/share/arduino
# list boards with: make show_boards
BOARD_TAG = promicro16
ARDUINO_LIBS = EEPROM 
# MONITOR_CMD = picocom -b 9600
MONITOR_CMD = moni -config ACM0-9600.cfg
ARDUINO_PORT = /dev/serial/by-id/usb-Arduino_LLC_Arduino_Leonardo-if00
# ARDUINO_PORT = /dev/ttyACM0
# ARDUINO_PORT = /dev/ttyUSB0
OPTIMIZATION_FLAGS = -Os -fexpensive-optimizations -fstrength-reduce
#

Файлы «* .ino» не нуждаются в изменении, а файл Makefile должен быть помещен в тот же каталог.

Между тем я предпочитаю Makefile, но я все еще использую IDE для небольших проектов.

ответил 6 J000000Sunday14 2014, 19:05:58
0
  

То, что я хочу знать, - «как написать такую ​​программу, чтобы она считалась действительной как с помощью Arduino IDE, так и с g ++.

Смотрите: Как избежать причуд предварительной обработки файла эскиза IDE .

Не обращая внимания на то, как будет выглядеть Makefile, простой ответ на ваш вопрос, как описано в приведенной выше ссылке, заключается в том, чтобы поместить все в вкладки .cpp и .h в среде IDE и оставить основной «эскиз», (.ino файл) пустой. Это все равно будет компилироваться в среде IDE, и поэтому будет нормальным C ++.

Убедитесь, что вы запустили свои .cpp-файлы:

#include <Arduino.h>

Если вы используете библиотеки (например, SPI), вы должны включить их в основной файл эскиза, который запускает IDE для их копирования в файл временной сборки проекта. Makefile не заботится об этом, так как вы убедитесь, что ваш Makefile содержит все необходимые файлы библиотеки.

Также см. мой ответ здесь: Классы и объекты: сколько и какие типы файлов мне действительно нужно использовать?

ответил Nick Gammon 28 J000000Tuesday15 2015, 00:35:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132