Lenguajes de programación para ingenieros electrónicos

22

Soy un estudiante de Electrónica e Ingeniería de Comunicaciones. Antes de llegar a la universidad, he estado interesado en la programación y las aplicaciones informáticas. Me había centrado en diseñar aplicaciones de Windows y aprender sus técnicas, pero ahora, siento que esto no sirve para nada en mi campo ... ¡No tengo que aprender todo sobre informática y desarrollo de software! (¿Tengo razón sobre esto?)

Sé VB .Net, C # y C ++. Tengo un montón de tiempo en mis vacaciones, así que quiero profundizar más programáticamente en el "campo de la electrónica". Entonces, ¿qué recomendarías para aprender o para enfocarte?

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

    
pregunta Siraj Muhammad

10 respuestas

29

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

La mayoría de los microcontroladores de un tamaño determinado (p. ej., PIC, AVR, MSP430, etc.) usan C (o ensamblador) ya que hay muchas de alta calidad (versiones gratuita y $$ - p. ej., muchos compiladores comerciales se basan en el compilador GCC gratuito) Compiladores de c disponibles.
Obtienes otros idiomas como el excelente JAL para PIC (el autor original Wouter Van Ooijen que es miembro aquí), PICBASIC, variantes de Ada, pero debido a su popularidad y al número de compiladores disponibles, yo diría que C es el idioma de elección para la mayoría. Si bien esto no significa que sea el mejor idioma, usar el lenguaje más popular conlleva ventajas obvias (documentación, soporte, portabilidad, colaboración, etc.)
Para los micros de 32 bits más complejos y más grandes como muchas variantes de ARM, también hay C ++ y otros compiladores disponibles.

Me gustaría saltar a la derecha y tomar algunas placas de desarrollo y obtener la codificación. Puede elegir un micro de 8 bits de gama baja como el PIC16F (muchos kits de inicio en Microchip Direct)
Un medio de la gama de 16 bits micro como el PIC24, y también un C / C ++ / incrustado ARM de linux de algún tipo - el STM32F4 ARM Cortex M4 Discovery es una placa de desarrollo muy barata que vale la pena aprovechar. En el lenguaje de descripción de hardware y lógica programable (HDL, los dos grandes son Verilog y VHDL), también puede valer la pena adquirir una placa de desarrollo FPGA o CPLD de Diglent o similar.

Si no desea esperar por un panel de desarrollo, puede descargar MPLAB o MPLABX y usar el simulador excelente para probar el desarrollo de PIC. Lo mismo ocurre con otras herramientas, por ejemplo, puede descargar Xilinx ISE Webpack de forma gratuita y probar HDL y el diseño de lógica programable.

    
respondido por el Oli Glaser
23

Aprenda C y obtenga una placa de desarrollo de microcontrolador barata, como un MSP430 o ARM Cortex, y al menos escriba y cargue algunos programas en C.

Tengo un título en ciencias de la computación y un fondo de desarrollo de software, principalmente programación en C ++ para juegos y ahora juegos y aplicaciones para iOS, pero mi último trabajo fue un trabajo semiprofesional de EE que comenzó con hacer un montón de programación de firmware para un ARM Cortex M3, y luego terminé aprendiendo a hacer algunos diseños básicos de circuitos y diseños de tableros y diseñé un par de tableros simples. Así que básicamente tuve que enfrentar el problema de usar el mejor lenguaje de programación para unir el diseño de hardware / software como alguien responsable de ambos extremos.

C es absolutamente el idioma que necesitas saber. Es fácil para las personas que programan en C ++ y en realidad nunca tienen que limitarse al conjunto de funciones de C para decir "es lo mismo", pero no lo es. Especialmente la forma en que C ++ ha evolucionado y recopilado características, y la forma en que los programadores de C ++ convencionales utilizan esas funciones, realmente es algo muy diferente trabajar en una aplicación de C razonablemente grande en lugar de una aplicación de C ++. Su SDK de firmware será un conjunto de bibliotecas de C, cualquier otra cosa que se ajuste a una MCU será una biblioteca de C, cualquier sistema operativo que tenga sentido en una MCU se escribirá en C, etc. etc.

Dicho esto, dado que muchas de las cadenas de herramientas de MCU por ahí terminan usando GCC como compilador, es casi seguro que tendrás un compilador de C ++ disponible si estás usando una familia de MCU decente. Pero debe tener mucho cuidado con las características que usa, especialmente las cosas de la biblioteca estándar, ya que es muy fácil terminar con un binario que es demasiado grande para que quepa en su dispositivo. Creo que hay un buen caso para usar C ++ en dispositivos integrados, C ++ tiene algunas características agradables que tienen basura o ningún tamaño o velocidad de penalización, solo tienes que saber qué estás haciendo y escribir el código. más adelante en el extremo del espectro de estilo C que el extremo STL del espectro en términos de uso de características inteligentes.

No le prestes demasiada atención a las personas que dicen que puedes usar Lua o Python en una MCU con el intérprete incorporado correcto bla, bla. Es cierto, lo he hecho y es divertido, pero en este momento es más para proyectos de juguetes y cosas que aparecen en Hack a Day. Creo que veremos más de ese tipo de cosas, ya que la Ley de Moore se aplica implacablemente incluso a los procesadores más pequeños, esto es algo que sucedió con los juegos donde solía haber mucho ensamblaje, luego se mantuvieron con C y C ++ más tiempo. más que todos los demás, y ahora todo es tan rápido, y la productividad del desarrollador es tan importante que gran parte del desarrollo se realiza con lenguajes integrados de nivel superior o en un lenguaje de alto nivel de manera absoluta. Aun así, pasarán algunos años antes de que las empresas contraten a programadores de firmware con fondos de Python y Lua.

Tampoco pases demasiado tiempo en el montaje. No es malo estar familiarizado con los conceptos, pero es poco probable que te encuentres haciendo mucho, si es que hay alguna programación de ensamblaje. Es como esta sabiduría convencional con juegos e incrustada que es un ensamblaje "bueno saberlo", a menudo repetido por personas que en realidad no trabajan en esos campos. Pero en realidad es muy poco probable que escriba algún ensamblaje, y si lo hace, probablemente solo sean unas pocas líneas para la optimización o algo con el hardware para el que no tiene una API (pero lo hará). después de escribir uno que envuelve unas pocas líneas de montaje). He trabajado en varios juegos y ese proyecto de diseño de placa / firmware y el número total de líneas de ensamblaje que he escrito para proyectos comerciales es probablemente en los adolescentes bajos. No es productivo, no es portátil y no se puede leer, por lo que solo se usa como la última opción posible.

    
respondido por el Suboptimus
10

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

También recomendaría aprender al menos un lenguaje ensamblador. Hacer esto te hará un programador de C mucho mejor. Necesitas saber qué está pasando bajo el capó, y esto es mucho más cierto en el mundo integrado que en el mundo de las PC.

Comprender el ensamblador que su C está generando le permitirá escribir una C más óptima en términos de velocidad y compacidad. Código más rápido significa:

  • puede usar un MCU más lento y más económico y socavar a un competidor.
  • puede reducir la velocidad de reloj para mejorar el cumplimiento de EMC.
  • en una aplicación de bajo consumo, la MCU puede pasar más tiempo en reposo, lo que lleva directamente a una mayor duración de la batería.

Un código más compacto significa que puede 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 . Este es un lenguaje de descripción de hardware, y realmente muy diferente a C, no solo por su aspecto, sino también por su funcionalidad. Verilog abrirá el camino para aprovechar los chips muy potentes como el Cypress PSoC3 and 5 . Es un microcontrolador con hardware analógico y digital reprogramable, que le permite hacer cosas increíbles que son muy difíciles de hacer con cualquier otra MCU. También podrás hacer el diseño de FPGA .

    
respondido por el Rocketmagnet
9

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

LabVIEW comenzó como un lenguaje de programación para ingenieros de hardware, puede ver esto 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 y lleno de características con soporte para Orientación de objetos y subprocesos múltiples. 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 programar una aplicación de múltiples hilos en LabVIEW; Esto es en gran parte debido a su paradigma de flujo de datos. A medida que la cantidad de núcleos de CPU continúe aumentando, LabVIEW será cada vez más relevante como lenguaje de propósito general.

Otro beneficio de conocer LabVIEW es que solo está a un paso de programar FPGA utilizando el módulo de LabVIEW FPGA que toma su código de LabVIEW y lo convierte a VHDL entre bastidores antes de que lo pase al compilador Xilinx. También puede usar sus habilidades de LabVIEW para pasar a la programación de código en tiempo real a través del LabVIEW Real-Time Module que usa VxWorks o Phar Lap.

Nota: Soy un desarrollador certificado de LabVIEW.

    
respondido por el SiegeX
6

Si desea realizar una programación de bajo nivel de microcontroladores, debería sentirse cómodo con la programación en lenguaje ensamblador (cuanto más diferentes arquitecturas, mejor), y sí, utilizará C mucho más de lo que usa C ++.

Para trabajos de ingeniería en general, los lenguajes orientados a las matemáticas, como Matlab (también Scilab y GNU Octave) se usarán comúnmente para modelar y crear prototipos.

Además, muchos IDE para software y hardware son compatibles con secuencias de comandos, por lo general, utilizan TCL o LUA, por lo que sería útil familiarizarse con los lenguajes de secuencias de comandos en general (también Perl, Python, PHP, Javascript, etc.).

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

    
respondido por el Dave Tweed
6

¿Es C ++ suficiente? Tal vez.

Recuerde que C se usa en aproximadamente el 90-99% de todos los mcu: s, por lo que C es una necesidad en su currículum.

Pero como eres un jugador de alto nivel, puedes comenzar a jugar con los Arduino: s ya que están programados con un C ++ reducido, y eso daría una idea aproximada de lo que C ++ puede hacer en el mundo Mcu en este momento.

    
respondido por el Johan
3

Para los microcontroladores (y solo abordaré los microcontroladores), creo que C es un lenguaje de entrada mucho mejor que C ++. Ensamblar sería el siguiente paso, fantástico para ayudarte a entender cómo tu compilador de C te está jodiendo, creando errores, robando tics de reloj, etc., y extrayendo el máximo rendimiento de tu plataforma. Todo esto suponiendo que esté hablando de un microcontrolador, no de un arduino, BASIC Stamp o cualquier otra plataforma que incluya un microcontrolador envuelto.

Es difícil decir lo que es útil para "su campo", ¡y sugiera que como estudiante quizás no sepa realmente cuál es su campo todavía! - pero creo que su conjunto de idiomas parece bastante razonable y se encontrará usándolo una y otra vez. Por lo menos, tener un buen dominio de un lenguaje estructurado hace que el siguiente sea mucho más fácil, pero creo que siempre encontrará agradables las habilidades de programación de Windows en su bolsillo.

    
respondido por el Scott Seidman
2

Si trabaja con procesadores, puede aprender C y el tipo de código de ensamblador generado por las sentencias C, pero también debería aprender a usar un shell de línea de comandos de Unix como bash y las herramientas que lo acompañan. como sed, ed, awk, vim / vi, find, tar, gzip, ... así como Python, que puede usar en muchas plataformas y es una buena manera de "hacer las cosas".

    
respondido por el Paddy3118
2

Debes aprender C si quieres ser un desarrollador incrustado serio. También deberías conocer el ensamblador, aunque probablemente lo uses muy raramente.

    
respondido por el mjh2007
0

Primero definiré a un ingeniero electrónico como alguien involucrado en el diseño de hardware desde el firmware hasta el diseño de la placa y el diseño del chip. En algunos casos, hará firmware, como se indicó anteriormente, necesitará "C". El software más profundo se convierte simplemente en una herramienta, por lo que entender algunos conceptos de comp sci en lenguajes complementarios desde C / C ++ a Lisp será más importante que los específicos. Necesitará software para respaldar sus esfuerzos de diseño, pero eso no tiene prioridad para comprender los límites fundamentales de lo que se puede hacer en una implementación física. El diseño digital NO es Verilog / VHDL incluso si el diseño se expresa en esos idiomas. En un diseño totalmente personalizado e in silico, verá Lisp como lenguajes y C - lenguajes funcionales. Las cosas están más orientadas hacia Python para las secuencias de comandos, pero hay una gran cantidad de bancos de prueba y software de comprobación / scripts de Perl / Skill / C / System C / Verilog-A / VHDL.

    
respondido por el placeholder

Lea otras preguntas en las etiquetas