22 votos

Lenguajes de programación para ingenieros electrónicos

Soy estudiante de Ingeniería Electrónica y Comunicaciones, antes de llegar a la universidad, me ha interesado la programación y las aplicaciones informáticas. Me había centrado en diseñar aplicaciones para Windows y aprender sus técnicas, pero ahora, siento que esto es inútil en mi campo... ¡No tengo por qué aprenderlo todo sobre informática y desarrollo de software! (¿Estoy en lo cierto?)

Conozco VB .Net, C# y C++. Tengo mucho tiempo en mis vacaciones así que quiero profundizar programáticamente en el "campo de la electrónica". ¿Qué me recomendarías aprender o en qué centrarme?

Quiero que esos lenguajes se utilicen en la programación de microcontroladores y otros circuitos integrados. ¿Basta con C++ o debería dominar también C? Dime lo que piensas por favor.

29voto

SandeepJ Puntos 1339

Sí, es casi seguro que es una buena jugada aprender a usar C lo mejor posible (C++ le dará un punto de partida útil, aunque como leftaroundabout notas, todavía habrá mucho que recoger, especialmente las diferencias entre la codificación para pequeños sistemas embebidos en comparación con escribir para algo como Windows) dada su ubicuidad.

La mayoría de los microcontroladores por debajo de cierto tamaño (por ejemplo, PIC, AVR, MSP430, etc.) utilizan C (o ensamblador), ya que existen muchos compiladores de C de alta calidad (versiones gratuitas y de pago; por ejemplo, muchos compiladores comerciales se basan en el compilador gratuito GCC).
Existen otros lenguajes como el excelente JAL para PIC (cuyo autor original es Wouter Van Ooijen, que es miembro de esta web), PICBASIC, variantes de Ada, pero debido a su popularidad y al número de compiladores disponibles, yo diría que C es el lenguaje preferido por la mayoría. Aunque esto no significa que sea el mejor, utilizar el lenguaje más popular tiene ventajas obvias (documentación, soporte, portabilidad, colaboración, etc.).
Para los micros de 32 bits más complejos y grandes, como muchas variantes de ARM, también existen compiladores de C++ y otros.

Yo me pondría manos a la obra, me haría con unas cuantas placas de desarrollo y me pondría a programar. Podrías elegir un micro de 8 bits de gama baja como el PIC16F (muchos kits de iniciación en Microchip Direct)
Un micro de 16 bits de gama media como el PIC24, y también un ARM C/C++/linux embebido de algún tipo - el STM32F4 ARM Cortex M4 Discovery es una placa de desarrollo muy barata que podría valer la pena.
En cuanto a la lógica programable y el lenguaje de descripción de hardware (HDL, los dos más importantes son Verilog y VHDL), puede que también merezca la pena hacerse con una placa de desarrollo FPGA o CPLD de Diglent o similar.

Si no quieres esperar a tener una placa de desarrollo, puedes descargarte MPLAB o MPLABX y utilizar el excelente simulador para probar a desarrollar PIC. Lo mismo ocurre con otras herramientas también, por ejemplo, puede descargar Xilinx ISE Webpack de forma gratuita y probar HDLs y diseño de lógica programable.

23voto

BobFlemming Puntos 189

Aprende C, y consigue una placa de desarrollo de microcontroladores barata, como un MSP430 o un ARM Cortex, y al menos escribe y carga unos cuantos programas en C.

Tengo una licenciatura en ciencias de la computación y un fondo de desarrollo de software, sobre todo la programación de C ++ para los juegos y ahora los juegos de iOS y aplicaciones, pero mi último trabajo fue un semi-profesional EE concierto que comenzó con hacer un montón de programación de firmware para un sistema ARM Cortex M3, y luego terminó conmigo aprender a hacer un poco de diseño de circuitos básicos y diseño de la placa y el diseño de un par de placas simples. Así que básicamente tuve que enfrentarme al problema de utilizar el mejor lenguaje de programación para unir el diseño de hardware/software como alguien que era responsable de ambos extremos.

C es absolutamente el lenguaje que necesitas conocer. Es fácil para la gente que programa en C++ y nunca tiene que limitarse al conjunto de características de C decir "es lo mismo", pero no es así. Especialmente por la forma en que C++ ha evolucionado y reunido características, y la forma en que los programadores de C++ utilizan esas características, es realmente muy diferente trabajar en una aplicación C razonablemente grande que en una aplicación C++. Tu SDK de firmware será un montón de librerías C, cualquier otra cosa que quepa en una MCU será una librería C, cualquier SO que tenga sentido en una MCU estará escrito en C, etc. etc.

Dicho esto, dado que muchas de las cadenas de herramientas de MCU acaban utilizando GCC como compilador, es casi seguro que dispondrás de un compilador de C++ si utilizas una familia de MCU decente. Pero hay que tener mucho cuidado con las características que se utilizan, especialmente las cosas de la biblioteca estándar, ya que es muy fácil terminar con un binario que es demasiado grande para caber en el dispositivo. Creo que hay una buena razón para usar C++ en dispositivos embebidos, C++ tiene bastantes buenas características que tienen poca o ninguna penalización de tamaño o velocidad, sólo tienes que saber lo que estás haciendo y escribir código que está mucho más en el extremo del espectro del estilo C que en el extremo del espectro STL en términos de uso inteligente de características.

No hagas demasiado caso a la gente que dice que puedes usar Lua o Python en una MCU con el intérprete embebido adecuado bla, bla. Eso es cierto, yo lo he hecho y es divertido, pero por el momento es más para proyectos de juguete y cosas que aparecen en Hack a Day. Creo que veremos más de ese tipo de cosas a medida que la Ley de Moore se aplique implacablemente incluso a los procesadores más pequeños, esto es algo que pasó con los juegos, donde solía haber mucho ensamblador, luego aguantaron con C y C++ más que los demás, y ahora todo es tan rápido, y la productividad del desarrollador es tan importante que gran parte del desarrollo se hace con lenguajes de alto nivel embebidos o en un lenguaje de alto nivel a secas. Aun así, pasarán algunos años antes de que las empresas contraten programadores de firmware con conocimientos de Python y Lua.

Tampoco dediques demasiado tiempo al montaje. No está mal familiarizarse con los conceptos, pero es poco probable que te encuentres haciendo mucha, si acaso alguna programación en ensamblador. Hay como esta sabiduría convencional con los juegos y embebidos que es "bueno saber" ensamblador, a menudo repetido por personas que en realidad no trabajan en esos campos. Pero en realidad es muy poco probable que escribas nada de ensamblador, nunca, y si lo haces probablemente sólo serán unas pocas líneas para optimización o algo con el hardware para lo que simplemente no tienes una API (pero la tendrás después de escribir una que envuelva unas pocas líneas de ensamblador). He trabajado en varios juegos y en ese proyecto de diseño de placa/firmware, y el número total de líneas de ensamblador que he escrito para proyectos comerciales es probablemente de unas pocas decenas. No es productivo, no es portable y no es legible, así que sólo se usa como última opción posible.

10voto

Armandas Puntos 552

Estoy de acuerdo con los demás en que hay que ser muy competente en C.

También recomendaría aprender al menos un lenguaje ensamblador. Esto te convertirá en un programador de C mucho mejor. Tienes que saber lo que pasa bajo el capó, y esto es mucho más cierto en el mundo de los sistemas embebidos que en el de los PC.

Comprender el ensamblador que genera su C le permitirá escribir un C más óptimo en términos de velocidad y compacidad. Un código más rápido significa:

  • puedes usar una MCU más lenta y barata y rebajar a un competidor.
  • puedes reducir la frecuencia de reloj para mejorar la compatibilidad electromagnética.
  • en una aplicación de bajo consumo, la MCU puede pasar más tiempo en reposo, lo que se traduce directamente en una mayor duración de la batería.

Un código más compacto permite utilizar una MCU más barata con menos memoria. O tener espacio para más funciones.


El otro idioma que podría considerar aprender es Verilog . Se trata de un lenguaje de descripción de hardware y es muy diferente de C, no sólo por su aspecto, sino también por su funcionalidad. Verilog abrirá el camino para aprovechar chips muy potentes como el Cypress PSoC3 y 5 . Es un microcontrolador con hardware analógico y digital reprogramable, que te permite hacer algunas cosas increíbles que son muy difíciles de hacer con cualquier otro MCU. También podrás hacer FPGA diseño.

9voto

mona Puntos 16

Como un MSEE que ha estado trabajando en la industria de Defensa durante 8 años, te puedo decir que la comprensión de cómo programar bien en LabVIEW (un lenguaje gráfico, estrictamente tipado y de flujo de datos) significa que nunca le faltará trabajo.

LabVIEW comenzó como un lenguaje de programación para ingenieros de hardware, esto se puede ver en el hecho de que el código se parece mucho a un diagrama de circuito. Sin embargo, en los últimos 25 años LabVIEW se ha convertido en un lenguaje completo, rico en características, con soporte para Orientación a Objetos y multi-threading. De hecho, yo diría que no hay otro lenguaje de programación, basado en texto o de otro tipo, que sea más fácil de programar una aplicación multi-hilo que LabVIEW; esto es en gran parte debido a su paradigma de flujo de datos. A medida que el número de núcleos de CPU siga aumentando, LabVIEW será cada vez más relevante como lenguaje de propósito general.

Otra ventaja de conocer LabVIEW es que estás a un paso de programar FPGAs utilizando el Módulo LabVIEW FPGA que toma tu código de LabVIEW y lo convierte a VHDL entre bastidores antes de pasarlo al compilador de Xilinx. También puede utilizar sus habilidades de LabVIEW para la transición a la programación de código en tiempo real a través de la Módulo de tiempo real de LabVIEW que utiliza VxWorks o Phar Lap.

Nota: Soy Desarrollador Certificado de LabVIEW.

enter image description here

6voto

GSerg Puntos 33571

Si quieres hacer programación de bajo nivel de microcontroladores, entonces deberías sentirte cómodo con la programación en ensamblador (cuantas más arquitecturas diferentes mejor), y sí, usarás C mucho más que C++.

Para trabajos generales de ingeniería, se utilizarán habitualmente lenguajes orientados a las matemáticas como Matlab (también Scilab y GNU Octave) para modelado y creación de prototipos.

Además, muchos IDE para software y hardware son programables, normalmente mediante TCL o LUA, por lo que sería útil tener cierta familiaridad con los lenguajes de programación en general (también Perl, Python, PHP, Javascript, etc.).

Para el diseño de hardware, necesitarás conocimientos de Verilog y/o VHDL.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X