¿Es Arduino una buena introducción a la programación integrada?

En mi humilde opinión, Arduino es una de las mejores formas de presentarse al mundo de la programación integrada (siempre que conozca la programación).
Proporciona un IDE muy agradable, proporciona algunas bibliotecas muy buenas para funcionalidades básicas y garantiza que un principiante en incrustar no quede atrapado en las desgarradoras experiencias de integración de hardware y software.

Sus envoltorios para GPIO, UART, SPI, etc. son de primera categoría y el hecho de que oculta el número infinito de opciones de Makefile (y el programador en sí) compensan su diseño híbrido Java / C / C ++. Incluso oculta muchos problemas de concurrencia con interrupciones con algún código inteligente.

Hace que trabajar con empotrado sea un placer. Es excelente para comenzar a hacer proyectos, aprender e incluso crear productos terminados (es hardware abierto). Solo necesita algunos LED, motores, otra placa Arduino, escudos para laptop y WiFi, etc. para aprender todo sobre la programación integrada desde una descripción general de alto nivel.
Pero a veces necesitas saber los detalles sucios. Esta situación generalmente no viene en etapas de introducción, por lo que podemos ignorarla.

Por supuesto, pronto querrá (o más bien tendrá que) cambiar a la programación en C (o el montaje del cielo) y aprender y hacer todo lo que arduino hace en segundo plano en el microcontrolador. Entonces tendrás suficientes oportunidades para maldecir a Arduino por esconder el sucio pozo negro de problemas.
Pero hasta entonces:

TL; DR Arduino es una muy buena herramienta de nivel de entrada para crear una aplicación maravillosa para la electrónica integrada.

Antes de comenzar, tenga en cuenta que solo soy un estudiante de Ingeniería Eléctrica en este momento, y que todavía, al momento de escribir esto, aún no he probado lo suficiente como para ser considerado una figura establecida en el campo de la Ingeniería Eléctrica. También escribo esto con el debido respeto a los autores de las respuestas actuales y futuras a esta pregunta. Otro factor a tener en cuenta es que soy, más bien inconscientemente, parcial en lo que respecta a la programación, como aprendí y usé regularmente C y C ++ desde que tenía 12 años (ayer cumplí 27 años). Esto, solo, no constituye mucho más que el hecho de que lo más probable es que prefiera C / C ++ sobre cualquier otro lenguaje de programación, ya que es más natural para mí.

En mi opinión, creo que Arduino no proporciona una verdadera introducción a la programación integrada. Si se encuentra en algún campo de la ingeniería, podríamos argumentar que en realidad es una experiencia contraproducente con respecto a los sistemas integrados, porque da una falsa idea de cómo es la programación integrada. Permíteme explicarte.

El aspecto de programación (con alguna mención de arquitectura de hardware)
Cuando uno aprende a programar un dispositivo Arduino, eso es lo único que está haciendo: programar un dispositivo Arduino. Esto se debe a que lo más probable es que utilicen bibliotecas formadas a partir de bibliotecas, que se forman a partir de incluso más bibliotecas. El resultado de esto es a menudo una experiencia de programación de nivel superior muy abstracta que requiere un conocimiento mínimo de la arquitectura del hardware. Esto hace posible que la mayoría de los programadores de Arduino nunca tengan que entender lo que está haciendo el hardware (lo que de alguna manera me recuerda el protocolo SSL, solo estoy bromeando). El lenguaje también es diferente de la norma (la norma es C / C ++). Por lo tanto, no veo ningún valor verdadero que se obtenga de la experiencia de programación de Arduino, aparte de mostrar interés en explorar la electrónica utilizando un lenguaje de programación tipo C. O, tal vez, tener una cartera de proyectos de Arduino para luego convertirlos en implementar uno o más dispositivos integrados de arquitectura (s) sofisticadas y potentes. Aunque, tengo más razones por las cuales creo que este es el caso.

La gran brecha
He estado en competiciones / eventos donde la mayoría no ha podido programar los dispositivos integrados más potentes. ¿Y podría adivinar cuál era el problema principal, aparte de la falta de interés? Obviamente, atrayendo a muchos de la multitud de Arduino, hubo quejas sobre cómo les gustaba mucho más el Arduino y que los desarrolladores de las unidades de microcontrolador de 32 bits no hicieron un buen trabajo al hacer que sus dispositivos fueran programables (ni siquiera estoy seguro de cómo comparación alguna vez se hace). Parece que muchos de los que tuvieron la experiencia de Arduino estaban disgustados porque no había más bibliotecas que les permitieran hacer nada más que programación de nivel superior y evitar tener que lidiar con cosas de nivel inferior, como interrupciones (esencialmente, reproducir la idea de Arduino y perdiendo poder sobre el hardware nuevamente). Considero que esa es la gran brecha problemática entre la experiencia Arduino y la experiencia de programar los dispositivos integrados más sofisticados que equipan a los programadores para tener un control casi completo del hardware. El Arduino brinda la oportunidad a todos de escapar de tener que aprender la arquitectura de hardware para la mayoría de los tipos de proyectos. Si bien, en el caso de este último, el programador debe ser consciente de casi todas las partes de la arquitectura, ya que tendrá que controlar directamente diferentes módulos / periféricos, o de lo contrario las cosas simplemente no sucederán. La falta de interés en ordenar múltiples módulos (con precisión, claro está) se convierte en una forma de mal hábito que, aparentemente, es desagradable de romper.

Aunque, estoy seguro de que hay sistemas integrados que están hechos para ser programados más fácilmente. Por todo lo que he tratado de experimentar, seguramente todavía no he visto suficiente. Entonces la experimentación continúa. No quiero terminar siendo un programador de sistema embebido débil o lento. Si puedes presentarme a algo que parecía haber perdido aquí, entonces hazlo. Lo apreciaría.

Ahora, habiendo dicho todo eso, tengo que mencionar que tengo algunas placas Arduino, que he usado y sigo usando, como herramientas para muchas necesidades, especialmente antes de tener un osciloscopio en casa. Son realmente agradable.

Algo.

Arduino tiene un IDE que puede usar para controlar entradas y salidas, y lograr que haga cosas interesantes en secuencia en las salidas basadas en las entradas. Debe tener una pila de dispositivos electrónicos, como LED, pasivos y quizás controladores de motor, para obtener realmente algo interesante de una placa Arduino. Muchos lugares venden kits. El IDE tiende a ocultar una gran parte del trabajo sucio que conlleva la aparición de hardware real embebido, pero es un gran lugar para comenzar a aprender sobre él, especialmente si amplía los diseños en el kit e intenta hacer cosas inteligentes. que implican resolver condiciones de carrera.

Comprar un Arduino y ponerlo en la parte superior de un armario no es útil. Tampoco lo está encendiendo. Si desea una buena introducción, debe poner su Arduino a un uso interesante. Es una herramienta habilitadora, no un fin en sí mismo.

More Interesting

¿Cuál es la ventaja de usar Linux para sistemas integrados como un controlador ARM sobre la programación básica?

¿Cuáles son algunas aplicaciones de un microcontrolador 8051?

Cómo aprender incrustado en C ++

¿Cuáles son los componentes de un sistema integrado, hardware y software?

¿Cuáles son las áreas amplias de la ingeniería integrada? ¿Dónde está la sinapsis que conecta a los ingenieros automotrices con los ingenieros integrados? ¿Dónde se debe comenzar en el vasto campo de la ingeniería integrada?

Cómo acelerar rápidamente en sistemas embebidos

Cómo aprender a programar sistemas integrados y VLSI por mi cuenta

Cómo aprender el desarrollo integrado si no sé nada sobre el lenguaje C o los microcontroladores, pero quiero aprenderlo

Si recibo un PCB (placa de circuito impreso) de un pequeño dispositivo de sistemas integrados, ¿cómo puedo analizarlo y conocer su funcionalidad?

¿Me pueden ayudar a aprender las características de un sistema integrado?

Mirando el SOC de los microprocesadores y microcontroladores, creo que no hay diferencia entre los dos, ya que ambos pueden reemplazarse entre sí. ¿Es correcto este entendimiento?

Tengo una placa Arduino Uno, con un código (boceto) ya quemado / almacenado en el microcontrolador. ¿Cómo puedo acceder a ese código?

Cómo comenzar a aprender microcontroladores y sistemas integrados desde cero

¿Cuáles son las áreas en un sistema embebido?

¿Cuál es la importancia de un diagrama de bloques en un sistema integrado?