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.