Soy estudiante de Ingeniería Electrónica y de Comunicaciones, antes de llegar a la universidad, me interesaba 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 es inútil 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 mucho tiempo en mis vacaciones, así que quiero profundizar programáticamente en el "campo de la electrónica". Entonces, ¿en qué recomendarías aprender o concentrarte?
Quiero esos lenguajes utilizados en la programación de microcontroladores y otros circuitos integrados. ¿C ++ es suficiente o debería dominar C también? Dime tus pensamientos por favor.
fuente
Respuestas:
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 notas restantes , todavía habrá mucho que aprender , especialmente las diferencias entre la codificación para pequeños sistemas integrados en comparación con escribir para algo como Windows) dada su ubicuidad.
La mayoría de los microcontroladores por debajo de un cierto tamaño (por ejemplo, PIC, AVR, MSP430, etc.) usan C (o ensamblador) ya que hay muchas versiones de alta calidad (gratuitas y $$ - por ejemplo, muchos compiladores comerciales se basan en el compilador GCC gratuito). .
Obtendrá otros idiomas como el excelente JAL para PIC (autor original Wouter Van Ooijen que es miembro aquí), PICBASIC, variantes de Ada, pero debido a su popularidad y número de compiladores disponibles, 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 idioma más popular tiene ventajas obvias (documentación, soporte, portabilidad, colaboración, etc.)
Para los micros más complejos y más grandes de 32 bits, como muchas variantes ARM, también hay C ++ y otros compiladores disponibles.
Me gustaría saltar y tomar algunas placas de desarrollo y obtener codificación. Puede elegir un micro de 8 bits de gama baja como el PIC16F (muchos kits de inicio en Microchip Direct)
Un micro de 16 bits en el medio del rango como el PIC24, y también un ARM C / C ++ / Linux integrado de algún tipo: el STM32F4 ARM Cortex M4 Discovery es una placa de desarrollo muy barata que podría valer la pena.
En el lado del lenguaje de descripción de hardware y lógica programable (HDL - los dos grandes son Verilog y VHDL), también puede valer la pena obtener una placa de desarrollo FPGA o CPLD de Diglent o similar.
Si no desea esperar un tablero de desarrollo, puede descargar MPLAB o MPLABX y usar el excelente simulador para probar el desarrollo de PIC. Lo mismo ocurre con otras herramientas también, por ejemplo, puede descargar Xilinx ISE Webpack de forma gratuita y probar HDL y diseño lógico programable.
fuente
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 experiencia en desarrollo de software, principalmente programación en C ++ para juegos y ahora juegos y aplicaciones para iOS, pero mi último trabajo fue un concierto de EE semi-profesional que comenzó con un montón de programación de firmware para un sistema ARM Cortex M3 , y luego terminé conmigo aprendiendo cómo hacer un diseño básico de circuito y diseño de placa y diseñando un par de placas 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 lenguaje que necesitas saber. Es fácil para las personas que programan en C ++ y 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 reunido características, y la forma en que los programadores principales de C ++ usan esas características, es realmente muy diferente trabajar en una aplicación C razonablemente grande en lugar de una aplicación C ++. Su SDK de firmware será un montón de bibliotecas C, cualquier otra cosa que se ajuste a una MCU será una biblioteca 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 MCU terminan usando GCC como su compilador, seguramente tendrá un compilador C ++ disponible si está utilizando una familia MCU decente. Pero debe tener mucho cuidado con las funciones que utiliza, especialmente las de la biblioteca estándar, ya que es muy fácil terminar con un binario que es demasiado grande para caber en su dispositivo. Creo que hay un buen caso para usar C ++ en dispositivos embebidos, C ++ tiene bastantes características agradables que tienen desperdicio o no hay penalización de tamaño o velocidad, solo tiene que saber lo que está haciendo y escribir código de esa manera más adelante en el extremo de estilo C del espectro que en el extremo STL del espectro en términos de uso inteligente de funciones.
No preste demasiada atención a las personas que dicen que puede usar Lua o Python en una MCU con el intérprete integrado adecuado, bla, bla. Es cierto, lo he hecho y es divertido, pero por el 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 aguantaron con C y C ++ más tiempo 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 alto nivel o en un lenguaje de alto nivel directamente. Aun así, pasarán algunos años antes de que veas empresas contratando 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 incrustados que es un ensamblaje "bueno saber", a menudo repetido por personas que realmente no trabajan en esos campos. Pero, en realidad, es muy poco probable que escriba algún ensamblaje, y si lo hace, probablemente solo habrá algunas líneas para la optimización o algo con el hardware para el que simplemente no tiene una API (pero lo hará después de escribir uno que envuelva algunas líneas de ensamblaje). He trabajado en varios juegos y en ese proyecto de diseño de placa / firmware y el número total de líneas de ensamblaje que he escrito para proyectos comerciales probablemente sea en la adolescencia. Eso'
fuente
asm()
), bien incrustadas en su código C. Esta es una combinación ganadora en todos los sentidos. Alto nivel pero compacto con ocasionales inmersiones en el ensamblaje cuando, por ejemplo, el momento debe ser el correcto. Laavr-gcc
cadena de herramientas ya hace esto mucho con las macros C, por lo que nunca se da cuenta.Estoy de acuerdo con todos los demás en que debes ser muy competente en C.
También recomendaría aprender al menos un lenguaje ensamblador también. Hacer esto te hará un mejor programador en C. Necesita saber qué sucede debajo del capó, y esto es mucho más cierto en el mundo integrado que en el mundo de las PC.
Comprender el ensamblador que genera su C le permitirá escribir un C más óptimo en términos de velocidad y compacidad. Código más rápido significa:
Un código más compacto significa que puede usar 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 es muy diferente a C, no solo en su aspecto, sino también en su funcionalidad. Verilog abrirá el camino para aprovechar chips muy potentes como Cypress PSoC3 y 5 . Es un microcontrolador con hardware reprogramable analógico y digital, que le permite hacer cosas increíbles que son muy difíciles de hacer con cualquier otra MCU. También podrás hacer diseño FPGA .
fuente
Como MSEE que ha estado trabajando en la industria de Defensa durante 8 años, puedo decirle que comprender cómo programar bien en LabVIEW (un lenguaje de flujo de datos gráfico y estrictamente tipado) significa que nunca le faltará trabajo.
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 rico en funciones con soporte para Orientación a Objetos y subprocesamiento múltiple. De hecho, 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 en una aplicación multiproceso que LabVIEW; Esto se debe en gran parte a su paradigma de flujo de datos. A medida que el número de núcleos de CPU continúe aumentando, LabVIEW se volverá cada vez más relevante como lenguaje de propósito general.
Otro beneficio de conocer LabVIEW es que usted está muy cerca de programar FPGA utilizando el módulo LabVIEW FPGA que toma su código de LabVIEW y lo convierte a VHDL detrás de escena antes de pasarlo al compilador Xilinx. También puede usar sus habilidades de LabVIEW para realizar la transición a la programación del código en tiempo real a través del módulo LabVIEW Real-Time que usa VxWorks o Phar Lap.
Nota: Soy un desarrollador certificado de LabVIEW.
fuente
Si desea hacer una programación de bajo nivel de microcontroladores, entonces debe sentirse cómodo con la programación de lenguaje de ensamblaje (cuantas más arquitecturas diferentes, mejor), y sí, usará C mucho más de lo que usa C ++.
Para el trabajo de ingeniería general, los lenguajes orientados a las matemáticas como Matlab (también Scilab y GNU Octave) se utilizarán comúnmente para modelar y crear prototipos.
Además, muchos IDE para software y hardware son programables, por lo general usan 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á habilidades de Verilog y / o VHDL.
fuente
¿Es suficiente C ++? Tal vez.
Recuerde que C se usa en algo como 90-99% de todos los mcu: s, por lo que C es imprescindible en su currículum.
Pero dado que eres un tipo 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.
fuente
Para los microcontroladores (y solo abordaré los microcontroladores), creo que C es un lenguaje de entrada mucho mejor que C ++. El ensamblaje sería el siguiente paso, fantástico para ayudarlo a comprender cómo su compilador de C lo está arruinando, creando errores, robando tictac de reloj, etc., y exprimiendo al máximo el rendimiento de su plataforma. Todo esto supone que está hablando de un microcontrolador, no de un arduino, BASIC Stamp o cualquier otra plataforma que involucre un microcontrolador envuelto.
¡Es difícil decir qué es útil para "su campo", y sugiera que, como estudiante, es posible que aún no sepa cuál es su campo! - 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 control de un lenguaje estructurado hace que el siguiente sea mucho más fácil, pero creo que siempre encontrarás agradables tus habilidades de programación de Windows en tu bolsillo.
fuente
Podría aprender C y el tipo de código de ensamblador generado por las sentencias C si trabaja con procesadores, pero también debe aprender cómo utilizar 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 puedes usar en muchas plataformas y es una buena manera de "hacer las cosas".
fuente
Debes aprender C si quieres ser un desarrollador incrustado serio. También debe conocer el ensamblador, aunque probablemente lo use muy raramente.
fuente
Primero definiré al 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 estará haciendo firmware, como se indicó anteriormente, necesitará "C". Un software más profundo se convierte simplemente en una herramienta, la comprensión de algunos conceptos de compci sci en lenguajes complementarios desde C / C ++ hasta lenguajes similares 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.
fuente