¿La programación integrada está más cerca de la ingeniería eléctrica o del desarrollo de software? [cerrado]


34

Me están abordando con un trabajo para escribir C incrustado en microcontroladores. Al principio, pensé que la programación de incrustación es demasiado baja para mí, pero tal vez estoy pensando en eso mal.

Normalmente habría descartado la oportunidad de escribir código incrustado, ya que no me considero un ingeniero eléctrico. ¿Es esta una mala suposición? ¿Puedo escribir software interesante y útil para sistemas embebidos, o me daré una patada por caer demasiado bajo en la pila de software?

Fui a la escuela de informática y realmente disfruté escribiendo un compilador, pensando en algoritmos concurrentes, diseñando estructuras de datos y desarrollando marcos. Sin embargo, actualmente estoy trabajando como desarrollador web, lo que no grita las cosas interesantes que acabo de describir. (Actualmente me ocupo de problemas como: "esta casilla de verificación debe estar a 4 píxeles a la izquierda" y "esta fecha tiene un formato incorrecto").

Agradezco el aporte de todos. Sé que tengo que tomar la decisión por mí mismo, solo me gustaría una aclaración sobre lo que significa ser un programador integrado, y si se ajusta a lo que considero interesante.

Respuestas:


33

Si quieres ser bueno trabajando en sistemas embebidos, entonces sí, debes pensar como un EE algunas veces. Eso es generalmente cuando está escribiendo código para interactuar con los diversos periféricos (buses seriales como UART, SPI, I2C o USB), temporizadores de 8 y 16 bits, generadores de reloj y ADC y DAC. Las "hojas de datos" para microcontroladores a menudo se encuentran en cientos de páginas, ya que describen cada bit de cada registro. Es útil poder leer un esquema para que pueda sondear una placa con un osciloscopio o un analizador lógico.

En otras ocasiones, solo está escribiendo software. Pero bajo restricciones estrictas: a menudo no tendrá un sistema operativo formal u otro marco, y es posible que solo tenga unos pocos KB de RAM y tal vez 64 KB de memoria de programa. (Estos límites están asumiendo que se está programando en micros más pequeños de 8 o 16 bits, si se está trabajando con Linux embebido en un procesador de 32 bits, que no tendrá las mismas restricciones de memoria, pero todavía tendrá que hacer frente a cualquier encargo hardware periférico para el que su distribución de Linux no proporciona controladores).

Tengo experiencia en EE y CS, así que disfruto de las dos caras de la moneda. También hago algo de programación web (principalmente PHP) y aplicaciones de escritorio (C # y Delphi), pero siempre he disfrutado más trabajando en proyectos integrados.


Gracias por tu respuesta. Las restricciones realmente no me molestan. Solo pienso en mí como un tipo de software y no como un ingeniero eléctrico. ¿Diría que "programación de bajo nivel" es lo mismo que "ingeniería eléctrica de alto nivel"?
Jeremy Heiler

+1 para las observaciones de 32 bits y Linux: solía trabajar en telecomunicaciones y el hardware del conmutador era como codificar una versión simplificada de un Amiga (procesador Motorla 68k). Tuve algunos momentos muy felices, a veces lo extraño.
Gary Rowe el

3
@Jeremy, sí, cuando intentas descifrar la configuración de un periférico complicado, o cuando miras un flujo de bits en serie en un osciloscopio, a veces parece que estás haciendo una programación de bajo nivel y a veces tienes que pensar como un alto -Nivel EE. Puede pasar mucho tiempo mirando el contenido del registro dentro de las ventanas del depurador de un IDE. En ese nivel, estás mirando directamente al hardware.
tcrosley

20

La respuesta de @Tcrosley es excelente. No es necesario ser ingeniero eléctrico, pero conocer los conceptos básicos ayuda.

No creo que deba temer ser "demasiado bajo en la pila de software". He tenido que resolver muchos problemas muy interesantes como ingeniero integrado. Menciona una lista de tareas que disfrutó:

  • Algoritmos concurrentes: lidiar con interrupciones asincrónicas de nivel de hardware tiene tantos desafíos interesantes como usar un modelo de subproceso OS.

  • Diseño de estructuras de datos - Verificar. Diseño para compacidad y acceso eficiente.

  • Desarrollo de marcos - Verificación. En los sistemas básicos, puede terminar diseñando un mini-OS.

  • Escribir un compilador, tal vez no, pero puede terminar haciendo una optimización de código de bajo nivel similar al paso de generación de ensamblaje de un compilador.

Elegiría trabajar en sistemas embebidos en lugar de codificar las interfaces de usuario cualquier día. Nunca olvidará la primera vez que vea una máquina comenzar a moverse de la manera en que la programó. Es mucho más satisfactorio que empujar píxeles.


Gracias por las asignaciones 1 a 1 de AShelly. Sin saber realmente nada sobre el entorno de trabajo integrado, es bueno saberlo.
Jeremy Heiler

6

Como programador integrado, mi trabajo es hacer que el hardware personalizado funcione. Por lo general, he desarrollado un montón de software en una placa de desarrollo, o una versión anterior de hardware. Cuando llega la nueva placa, mi trabajo es poner mi software en la placa y demostrar que todo funciona.

Debido a que casi siempre hay un problema de algún tipo, las habilidades de depuración son esenciales. Si el periférico externo no funciona, ¿es un chip defectuoso, una mala conexión al chip, un código defectuoso o un uso incorrecto del periférico en el chip? La única forma de saberlo es con una depuración extensa. Esto significa sentirse cómodo con osciloscopios, analizadores de red, analizadores lógicos y depuradores de destino. El proceso de depuración se vuelve casi científico. Desarrollo una hipótesis, diseño un experimento para proporcionar evidencia a favor o en contra de mi hipótesis, y pruebo.

Al evaluar pasantes o nuevos ingenieros integrados, esta habilidad es la más crítica. Todo el software tiene problemas, pero una vez que comienzas a interactuar con los mundos físicos, la variedad de esos problemas aumenta exponencialmente. La esencia de mi trabajo es resolver la larga serie de problemas entre el concepto y la realidad.


Es cierto que la depuración es una habilidad esencial para un programador integrado individual, particularmente el tipo de depuración que implica mirar la visualización de un alcance de almacenamiento conectado a las pistas en una PCB para diagnosticar un problema con el software integrado. :-) - Sin embargo, una mayor virtud en un equipo de ingenieros de software integrados es la capacidad de detectar errores automáticamente a través de pruebas avanzadas y técnicas de control de calidad.
William Payne

5

En mi experiencia, uno obtiene mejores resultados al acercarse al desarrollo de software de sistemas integrados con un sombrero de "desarrollador de software" en lugar de un sombrero de "ingeniero electrónico". (prácticas como TDD y CI son menos comunes en ingeniería de hardware)

Por otro lado, creo que la experiencia de desarrollar un sistema embebido lo hace uno mejor; desarrollador de software más completo.


2
Exactamente, los desarrolladores integrados aquí, la industria necesita más personas cs aquí, ya que el software se está volviendo mucho más complicado, somos realmente malos en las buenas prácticas de calidad de software.
Bjarke Freund-Hansen

Creo que la gente de CS también lo disfrutaría, ya que escribir software integrado es uno de los trabajos más gratificantes (intelectualmente, si no financieramente) que un desarrollador de software puede hacer.
William Payne

3

Estuve en una situación similar hace unos 8 años. En ese momento tenía 7 años de desarrollo de software en entornos de aplicaciones y servidores. Mi única experiencia en el manejo de bajo nivel con hardware antes había sido escribir en el ensamblador Z80 cuando era adolescente en un espectro ZX.

Ciertamente fue un desafío. Encontré que lidiar con los conjuntos de chips en ensamblador fue muy agradable y ciertamente aprendí mucho sobre hardware. Una parte sustancial de mi función fue probar el hardware utilizando software, por lo que aprendí a hacer frente a la programación y a reconocer que su error de software es en realidad un error de hardware. En realidad, a veces las personas de software y hardware pueden necesitar bastante trabajo para identificar si un error es hardware o software.

Un aspecto que no pude entregar fue el trabajo del controlador del dispositivo. Realmente nunca entendí esto, que es una cosa que yo y el director de la compañía nunca entendimos por qué. Simplemente se convirtió en un hecho aceptado.

Familiarizarse con un occiloscopio y un ion de soldadura será esencial. Recordando que cuando un tipo de hardware dice el número 26, SIEMPRE significa que 0x26 es útil. Darse cuenta de que los ingenieros de hardware consideran que tratar con software es una ayuda muy frustrante, pero luego, un proyecto de hardware que no involucra software se llama cable.

Permanecí en ese papel durante 4 años y solo me fui porque fui cazado furtivamente por una oportunidad realmente fantástica.


Gracias por compartir tu experiencia Ptolomeo. Lo aprecio.
Jeremy Heiler, el

Hoy en día, muchos cables también tienen microprocesadores. :-)
William Payne

2

Como todo, requiere un enfoque equilibrado. Me encanta trabajar con sistemas integrados en mi trabajo diario. Me hacen mejor en ingeniería eléctrica. La computación física y la automatización son muy emocionantes. Por otro lado, construir aplicaciones web y jugar con la computación en la nube es increíble.

Si lo hace bien, el lado del software buscará maneras de hacer las cosas de manera más inteligente y mejor. El lado del hardware lo mantendrá atento a los recursos y súper eficiente.


Gracias por tu respuesta. Lo veo como poder cambiar un poco los campos, si no es más que aprender los niveles más bajos y luego subir un poco la pila.
Jeremy Heiler,

2

No soy ingeniero eléctrico, pero he realizado una pequeña cantidad de desarrollo de software integrado. El mayor problema que he encontrado es que tengo una formación mucho más básica en matemáticas, por lo que no sé cómo descomponer fácilmente una compleja serie de algoritmos matemáticos avanzados en código sin mucha ayuda.

Para todas las cosas en las que necesitaba jugar con la señalización, leer valores de las entradas, enviar datos a las salidas y todo ese tipo de cosas, he encontrado un poco diferente conceptualmente de lo que hago día a día como un buen Desarrollador de software antiguo. Escribir software realmente es lo que es. Es cuando necesitas ir más allá del software real que encuentro que las cosas se ponen difíciles porque no tengo el conocimiento para meterme directamente con el hardware. Esto suele suceder al intentar depurar o probar el código. Si tiene una cadena de herramientas realmente excelente, es posible que haya integrado un entorno de depuración y simulación para eliminar la mayor parte del dolor, pero incluso con todo eso para ayudarlo, a veces necesita volver a lo básico y probar su código contra algún tipo de analizador, y la realidad es que la mayoría de las plataformas integradas no

Desde esta perspectiva, no creo que ser ingeniero eléctrico sea esencial para la programación integrada si las tareas son simples y los requisitos específicos de hardware reales son mínimos. Más allá de eso, creo que ser un EE facilitaría mucho la vida cuando se trabaja en un entorno integrado, particularmente cuando se requiere ciencia real para descubrir dónde están los problemas.


"EE's Ouija-Board" - genial, lo sé bien
Martin Beckett

2

No he realizado ninguna programación integrada de nivel empresarial, pero mi licenciatura se centró principalmente en sistemas integrados, de los cuales tengo unos años de experiencia real. Usamos C en Atmel AVR y tocamos algunos chips de Texas Instruments con VHDL, y teníamos algunas cosas teóricas sobre ARM.

En lo que teníamos, era aproximadamente 50-60 por ciento de programación (C), 20 por ciento de planificación / diseño (UML), y el resto era electrónica física (soldadura, medición, cableado, fabricación de cables, etc.). También estoy de acuerdo en que fue muy interesante y divertido de hacer, y en realidad desearía tener una carrera en sistemas integrados. Por desgracia, con un mercado muy pequeño en sistemas embebidos, tuve que recurrir a Java EE.

Pero yo divago; Yo diría que los porcentajes mencionados anteriormente están bastante cerca de los trabajos del mundo real, ya que nuestros maestros tienen sus propias empresas, y también mencionaron que tratarán de hacerlo lo más realista posible. Incluso tuvimos turnos aleatorios de 180 grados en los requisitos a mitad del proyecto, je je.

En cuanto a la pila. Conocer la programación integrada le dará grandes posibilidades de crear sus propios y muy reales productos de hardware que podría haber fabricado en plantas reales en Asia, y luego ensamblarlos en sus instalaciones (ya sea en casa o en su propia empresa). ¡Es muy interesante! También puede hacer muchos gadgets que serán útiles en el hogar, como luces de control de movimiento, temporizador para una máquina de café para preparar automáticamente su café matutino, etc. ¡Cosas realmente emocionantes!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.