¿C ++ frente al lenguaje Arduino?

¿Cuáles son las ventajas de cada idioma al utilizar Arduino?

Creo que esta es una buena pregunta general, pero Agregaré un poco acerca de por qué estoy preguntando si alguien quiere darme un consejo.

Tengo experiencia en lenguajes preprocesados como JavaScript, PHP y he jugado con lenguajes como Java y Visual Basic. En otras palabras, conozco técnicas de programación y orientación a objetos tanto clásica como prototípica, pero nada sobre la comunicación directa con el hardware.

Estoy haciendo un octocóptero y creo que un enfoque orientado a objetos será lo más fácil. (El software tendrá muchas funciones …) Sin embargo, nunca he escrito en C ++.

Dado que este es un Q & Un sitio que se supone para ayudar a otros, solo la pregunta general presentada al principio es de mucha importancia, pero agradecería cualquier comentario sobre mi situación.

Comentarios

  • Evite Arduino IDE ya que no se merece su nombre IDE, incluso es un editor muy pobre: puede ser bueno para principiantes y bocetos simples pero uno debería ir rápidamente a algo mejor.
  • Este es un desglose bastante sucinto de lo que se entiende por (y lo que ‘ s realmente bajo el capó de) el » Programación Arduino Idioma. »
  • C++ vs. The Arduino Language? – El » Idioma Arduino » es C ++. Hay un poco de preprocesamiento para ahorrarle hacer prototipos de funciones, pero definitivamente es C ++.
  • No existe el lenguaje arduino. Es simplemente una biblioteca.
  • No está tan relacionado con la pregunta como con los comentarios: Atmel Studio es gratis y en mi humilde opinión es mejor que Visual Studio para la programación arduino. También es compatible con el complemento Visual Micro, aunque no es necesario en absoluto para programar y depurar arduinos.

Respuesta

Mi experiencia personal como profesor (programación, mecatrónica) es que si tienes experiencia previa en programación y conoces conceptos como POO, es mejor apostar por C / C ++. El lenguaje arduino es realmente bueno para principiantes, pero tiene algunas limitaciones (por ejemplo, debe tener todos sus archivos en la misma carpeta). Y es básicamente una simplificación de C / C ++ (prácticamente puedes copiar & pegar código arduino en un archivo C / C ++, y funcionará). También tiene sentido que pueda usar un IDE completamente conocido como eclipse:

http://playground.arduino.cc/Code/Eclipse

Inicialmente se requiere un poco más de instalación y configuración de su entorno de desarrollo, pero en mi humilde opinión, vale la pena para programadores con experiencia en cualquier otro idioma.

En cualquier En su caso, no le perjudicará comenzar a usar el lenguaje arduino y el IDE de arduino durante unos días para familiarizarse con el hardware arduino y luego pasar a C / C ++ con Eclipse para desarrollar realmente su proyecto.

Comentarios

  • Gracias por sus pensamientos. Yo ‘ usaré el IDE de Arduino para aprender a controlar todos los diferentes hardware piezas como sensores y pantallas LCD, etc. Luego ‘ pasaré a C ++ para hacer el software para el octocóptero. ¿Conoces un libro bueno y breve para personas que saben otros idiomas? El » problema » con muchos libros que ‘ he encontrado incluyen tanto que no ‘ no los necesito porque ‘ m en un pequeño microcontrolador Atmel en lugar de una computadora de interfaz de usuario.
  • Hay un buen libro » Programación en C para Arduino » de Julien Bayle, que es útil. Es lenguaje C, no C ++, pero debería ayudarlo a comprender la base.
  • Esa es una buena solicitud: un libro breve y bueno con los conceptos básicos de C ++ para programadores de otros lenguajes. Lo siento, no puedo dar ninguna recomendación, no conozco ninguna buena. De hecho, escribí un libro, con un enfoque práctico (desarrollar un videojuego) para mis alumnos, pero solo está en español. Para un buen y práctico libro de C ++, recomendaría Deitel & Deitel Cómo programar C ++, puede omitir muchos capítulos avanzados.
  • C ++ admite funciones OO, lenguaje C no lo hace.
  • @FriendofKim No es exactamente lo que quise decir (aunque técnicamente podría hacerlo, el Due es lo suficientemente rápido como para admitir una solución de software para comunicaciones en serie que no sean de megabit, y tiene 5 U (S) ARTS en total, mientras que las bibliotecas Arduino solo proporcionan 4 de ellos, pero de todos modos, la placa Due no proporciona pines para uno de los USART); las bibliotecas de Arduino configuran los USART para usar el modo asíncrono, pero necesitaba sincronizar hasta 6 Mbps (y tuve que usar el modo SPI ya que la entrada tenía que tratarse como un flujo de bits sin procesar, por lo que no había bits de parada / etc.).), que también implicó modificar la configuración predeterminada del controlador PIO.

Respuesta

En teoría …
No existe realmente un lenguaje Arduino como tal. En realidad, es solo C ++ con algunas bibliotecas específicas de dominio. Estos agregan varias características, como funciones a las que puede llamar para controlar el hardware. Si no tuvieras esas funciones, necesitarías jugar directamente con registros especiales para controlar todo. Así es como se suele hacer la programación embebida. Es rápido, pero puede ser bastante difícil de aprender y comprender.

Además de las funciones, las bibliotecas agregan nombres alternativos para algunos tipos. Por ejemplo, boolean y byte no están en el estándar C ++. Sin embargo, son directamente equivalentes a bool y unsigned char.

Todas estas cosas significan que probablemente puedas portar general Código C ++ directamente a Arduino sin dificultad. Sin embargo, volver al revés puede requerir una pequeña edición.

En la práctica …
Habiendo dicho todo eso, la programación para Arduino no es exactamente lo mismo que la programación general de C ++. Sin embargo, muchas de las diferencias son comunes a toda la programación embebida (como la memoria limitada y el poder de procesamiento).

También vale la pena señalar que si está utilizando el IDE oficial de Arduino, hay todo tipo de molestas peculiaridades y limitaciones en la forma de configurar su código. Hay soluciones en todos los casos (hasta donde yo sé), pero a veces son bastante frustrantes.

Para una flexibilidad total, use un IDE de terceros (como Eclipse) con un complemento para admitir Arduino. Eso debería brindarle todas las ventajas de C ++, junto con las bibliotecas de Arduino.

Comentarios

Respuesta

¿Cuáles son las ventajas de C ++ frente al lenguaje Arduino cuando se usa Arduino? Tengo experiencia en lenguajes preprocesados como JavaScript, PHP y he jugado con lenguajes como Java y Visual Basic.

Primero, el compilador / IDE de Arduino acepta C y C ++ tal cual. De hecho, muchas de las bibliotecas están escritas en C ++. Gran parte del sistema subyacente no está orientado a objetos, pero podría estarlo.

Por lo tanto, «El lenguaje arduino» es C ++ o C.

C ++ no es una recolección de basura. Maneja variables en el alcance, si escribe:

int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } } 

Entonces encontrará que led y i no crecen ni tienen fugas, sin importar cuántas veces llame a blinkTimes.

Si i fuera una clase, se eliminaría de manera similar una vez que finalice la función. Por lo tanto, siempre que no esté usando new o funciones de asignación de memoria similares para crear nuevos objetos, entonces no tendrá que preocuparse por las fugas.

Es posible que aún se quede sin memoria, si crea clases enormes y use muchas de ellas en funciones profundamente anidadas, pero en general no tendrá problemas hasta que comience a lidiar con new y free funciones.

Si estás usando new, entonces «tendrás que llamar a delete en los momentos apropiados. C ++, y por extensión Arduino, no tiene recolección automática de basura, tienes que administrar explícitamente tu propia memoria.

Comentarios

  • Está bien, si se crean instancias de objetos (con new) aren ‘ t basura recolectada, yo ‘ tendré que aprender eso también. Supongo que cualquier libro sobre C ++ cubrirá eso. ¡Gracias por una buena respuesta!

Respuesta

— Actualización 170412
Escribí mi original respuesta hace tres años desde la perspectiva de que existía un «Arduino C ++» distinto. El lenguaje usado en el IDE es estándar C ++, porque es implementado por el compilador GNU C ++. Las diferencias «aparentes» aparecen porque el IDE hará un preprocesamiento para ayudar a los recién llegados al lenguaje a evitar un par de «problemas», al completar algunos #includes, f / ex. Pero usted puede, y yo lo hago, escribirle C ++ correcto y obtener justo lo que espera obtener.
— fin de actualización

Limite el uso de las funciones del lenguaje C ++ a aquellos cuya implementación Entendido completamente. Hay algunas características que se compilan en un código que consume más recursos de lo que es obvio al leer el código fuente. La lista .lss (fuente combinada y ensamblado) generada opcionalmente puede brindarle una buena idea de lo que hizo el compilador de C ++ cuando no estaba mirando.

A su pregunta sobre la memoria: C ++ no recolecta basura. Los lenguajes basados en pilas como C y C ++ asignan almacenamiento temporal en la pila para las variables automáticas en la entrada de la función, que luego se libera cuando la función regresa, pero esto no es una verdadera recolección de basura. Los objetos creados en el montón o en la memoria global viven hasta que los elimine explícitamente. Asegúrese de saber dónde, cuándo y durante cuánto tiempo se crearán diferentes tipos de objetos. Realmente no quieres que tu código new -ing y delete -ing objetos quiera o no. Se construirán en la memoria del montón, fragmentándolo y haciendo que crezca en la pila. Ahí es cuando su código – y su simpático «helicóptero – fallará.

C hace menos por usted, por lo que puede hacer menos para usted. No es una mala elección. C con algunas de las características de C ++ puede ser una opción aún mejor, dado que elige las características adicionales con criterio. C ++, si esas son sus dos opciones:

[Respuesta original] – C ++ es un lenguaje estandarizado Se implementa ampliamente en muchos entornos, incluidos los sistemas integrados y, por lo tanto, se prueba más exhaustivamente que el lenguaje muy parecido a C ++ que es «Arduino». Esto es especialmente importante para aplicaciones de misión crítica / críticas para la seguridad como las que está planeando. El código estrellado significa un helicóptero estrellado e incluso si no daña a nadie, romperá su costosa máquina.

  • Al ser estándar, C ++ es portátil. ¿Necesita actualizar su procesador? Todo menos el código específico de silicio se trasladará al nuevo. ¿Necesita cambiar su conjunto de herramientas, sistema de desarrollo, sistema operativo host? C ++ será compatible en todas partes. Aunque Arduino IDE se ejecutará en cualquier lugar donde se admita Java, es la única herramienta que utiliza Arduino C ++ y también es muy limitada l. Si desea utilizar Eclipse, las herramientas AVR, andar descalzo en la línea de comandos, desarrollar dentro de Emacs o cualquier otro entorno que prefiera, se admitirá C ++ estándar.

  • El IDE de Arduino hace las cosas a sus espaldas, específicamente, #incluye archivos .h cuando cree que los necesita. Incluso si es correcto, realmente desea escribir, o al menos ver y comprender, todo lo que verá el compilador. Los lenguajes de programación no están hechos para computadoras (las computadoras comen pedacitos para el desayuno); están hechos para personas, específicamente las personas que te siguen en el proyecto, la más importante de las cuales puede ser … ¡tú !, cuando 6 meses después escribiste un módulo, tienes que volver para mejorarlo o, más probablemente, arreglarlo. Realmente desea poder ver todo lo que ve el compilador.

Comentarios

  • Esta es una MUY buena respuesta . ¡Parece claro que a ti te gusta C ++ y que a mí también me gustaría! … Pero en serio, ‘ saltaré directamente a C ++ tan pronto como ‘ haya entendido cómo » la comunicación » con los diferentes sensores, etc. funciona.
  • ¿Conoce algún buen libro sobre el tema? (Adecuado para mí, que he estado programando durante años en otros idiomas y solo necesito la » parte incrustada » de C ++).
  • ¿Crees que Accelerated C ++ es un buen libro para esto?
  • Me gustaría poder ayudarte con el ‘ derecho ‘ libro, pero llegué a C ++ con una gran cantidad de C detrás de mí y Kernighan & Ritchie ‘ s El lenguaje de programación C sigue siendo mi libro de referencia (mal juego de palabras) para cualquier cosa que no sea explícitamente C ++, y Ellis & Stroustrup ‘ s Manual de referencia de C ++ anotado para C ++. Pero para escribir en hardware, ‘ hará bien en mirar algunas de las bibliotecas de dispositivos aportadas por los usuarios en Arduino.cc . Comience ajustando los puertos de E / S con las funciones pinMode (), digitalWrite () y digitalRead (), luego sus contrapartes de E / S analógicas y, finalmente, …
  • … planee escribir directamente en Registros de E / S para mejorar la velocidad y el espacio de memoria. Programas como blinky.cpp y hello.cpp son buenos lugares para empezar a jugar con el hardware. Agregue un multímetro simple y algunos LED con las resistencias limitadoras de corriente adecuadas soldadas permanentemente a una pierna y debería poder ver resultados reales, aunque simples, de sus esfuerzos. Después de eso, lea las hojas de datos de cualquier hardware que le interese para saber qué señales puede leer / debe escribirles para que se reproduzcan. Los sensores de temperatura son fáciles de usar y ¿no ‘ todos necesitan un registrador de frigoríficos? ¡Diviértete!

Respuesta

El lenguaje Arduino es C ++, pero es muy diferente de la mayoría de las variedades de C ++.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *