Me gustaría escribir mis bocetos para poder compilarlos / cargarlos usando el IDE de Arduino, u opcionalmente usando GCC y un archivo MAKE.
Sé incluir las declaraciones de funciones en la parte superior, pero ¿hay algo más que hacer para que mi compilador considere válido C ++ por mi compilador?
Actualización 1
Comprender lo que el IDE de Arduino hace a los archivos .ino y .pde está bien, pero es extraño a mi pregunta, por lo que esto no es un duplicado. Lo que quiero saber es "cómo escribo un programa de modo que sea considerado válido tanto por Arduino IDE como por g ++.
El archivo MAKE oficial (?) Disponible aquí explica qué hacer si se utiliza el archivo MAKE en lugar del 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);
... pero esto no explica cómo usar tanto el IDE como un archivo MAKE.
Actualización 2
Recientemente encontré PlatformIO que no responde a esta pregunta directamente, pero automatiza gran parte del proceso (genera archivos Scons para usted) y hasta ahora prefiero el flujo de trabajo sobre el IDE Arduino y el enfoque fuente + archivo MAKE. Buen apoyo de los autores también.
fuente
Respuestas:
Por gcc / g ++ creo que te refieres específicamente a avr-gcc / avr-g ++. Su código arduino probablemente no se considerará un código C / C ++ válido porque gcc intentará compilarse con su PC como sistema de destino. Muchas de las macros en "WProgram.h" se referirán a la memoria inaccesible en su sistema de destino.
Siempre que incluya el archivo de encabezado "WProgram.h" y cree su código con el Arduino Makefile anterior (que usa avr-g ++ no g ++), sus archivos cpp deberían compilarse y vincularse correctamente. Del mismo modo, podrá abrir su código Arduino dentro del IDE y verificar su código allí. El IDE pone el archivo "WProgram.h" por usted, por lo que técnicamente se incluiría dos veces. Sin embargo, los guardias de inclusión evitarán que se compile cualquier código duplicado.
fuente
En general, deberá indicar las funciones
setup()
yloop()
, son solo envoltorios del IDE:Esto funciona tanto en el IDE como en la línea de comando. A medida que especifique Board y SerialPort en el IDE, también deberá especificar ambos en el Makefile. Entonces terminarás con dos configuraciones.
Muchas personas abandonan el IDE porque prefieren usar editores diferentes o tienen más opciones de configuración configurando el compilador y los conmutadores de enlace.
Para hacerlo realmente fácil, puede usar Arduino Makefile . Hoy protagonizó con 347.
Aquí un ejemplo de Makefile:
Los archivos '* .ino' no necesitan cambiarse y el
Makefile
archivo debe colocarse en el mismo directorio.Mientras tanto, prefiero el
Makefile
camino, pero todavía uso el IDE para pequeños proyectos.fuente
Consulte: Cómo evitar las peculiaridades del preprocesamiento del archivo de boceto IDE .
Sin tener en cuenta por el momento cómo se verá el Makefile, la respuesta simple a su pregunta, como se discutió en el enlace anterior, es poner todo en las pestañas .cpp y .h en el IDE, y dejar el "boceto" principal (.ino archivo) en blanco. Eso aún se compilará bajo el IDE y, por lo tanto, también será C ++ normal.
Asegúrese de iniciar sus archivos .cpp con:
Si usa bibliotecas (por ejemplo, SPI), debe incluirlas en el archivo de boceto principal, lo que activa el IDE para copiarlas en el archivo de compilación del proyecto temporal. El Makefile no se preocupará por eso, ya que se asegurará de que su Makefile incluya todos los archivos de biblioteca necesarios.
También vea mi respuesta aquí: Clases y objetos: ¿cuántos y qué tipos de archivos necesito realmente para usarlos?
fuente