¿Qué es un ingeniero de software integrado?

Un ingeniero de software integrado también puede llamarse simplemente un ingeniero integrado. “Ingeniero de software”, en mi humilde opinión, no es el término correcto para usar, “Ingeniero de firmware” es más preciso y “Ingeniero integrado” es aún más preciso.

Los ingenieros integrados diseñan y escriben el nivel más bajo de código que se ejecuta en un dispositivo, muy parecido al BIOS de una PC. De hecho, una gran cantidad de ingenieros integrados más experimentados comenzaron sus carreras escribiendo código para computadoras pre-PC o DOS en los días en que era necesario comprender el hardware de la computadora para poder escribir el mejor y más eficiente código – porque en aquellos días las “pilas” no existían en la forma en que lo hacen hoy en día, todos los desarrolladores tenían que poder escribir la “pila completa” ellos mismos para todas y cada una de las aplicaciones (llamadas “programas” en esos días) que crearon.

Un ingeniero integrado casi nunca escribe código, en el sentido de que la mayoría de los otros “ingenieros de software” solo se ocupan de escribir código (y no necesitan preocuparse por los detalles del hardware en el que se ejecuta). Un ingeniero integrado siempre se centra en cómo el código que escribe interactúa con el hardware subyacente, y en un nivel muy bajo. Necesitarán saber cómo escribir código al estudiar los esquemas del hardware y comprender cómo interactuar con chips como Codecs y Serial EEPROMS, por nombrar solo dos (esto significa estudiar y comprender hojas de datos de chips y guías de usuario).

Como ingeniero integrado, no tiene el lujo de asumir que su código se está ejecutando en un hardware que funciona completamente (y en ocasiones tendrá que simular temporalmente en partes de firmware del hardware que aún no se han diseñado o prototipado), debe siempre considere que los errores pueden estar en el código, en el hardware o en una combinación de ambos: SIEMPRE. Como tal, un ingeniero integrado también debe ser parte de un ingeniero eléctrico, y cuanto mejor entiendan la electrónica (especialmente digital, pero también se necesita analógico), mejor será el trabajo que podrán hacer.

Encontrar y corregir errores o fallas lógicas en el código incrustado no solo requiere un depurador, como ocurre con el desarrollo de software, sino que casi tan necesario es un osciloscopio y un medidor de voltios / ohmios. Un ingeniero integrado necesita “ver” cómo interactúa su código con la electrónica. Un analizador lógico también puede ser extremadamente útil. Y hay otros equipos de prueba con los que el ingeniero integrado debe ser competente, tales como analizadores de protocolos y analizadores de espectro.

Por lo tanto, un ingeniero integrado es realmente una combinación de un ingeniero de software y un ingeniero eléctrico, que produce el nivel más bajo de código que se ejecuta en un dispositivo determinado.

Aquí hay algo de otra publicación mía que creo que de manera indirecta puede decir mucho sobre lo que es un ingeniero incorporado.

Los ingenieros integrados expertos pueden responder las siguientes preguntas de memoria, si tiene curiosidad por las respuestas de Google:

¿Cuál es la diferencia entre un drenaje abierto y una salida push-pull? ¿Por qué usarías uno u otro?

Explica la ley de Ohm.

¿Por qué no es una buena práctica conectar un LED directamente a una salida digital de microcontrolador? ¿Cuál es la forma correcta de manejar esto?

¿Cuáles son las diferencias entre los modos de disparo AUTO, NORMAL y SINGLE SWEEP en un osciloscopio?

¿Qué es un “árbol de reloj”?

¿Qué significa PWM y explica cómo funciona? ¿Para qué se puede utilizar PWM?

¿Qué es un archivo de descripción de enlazador? ¿Cuándo lo modificarías?

¿Cuál es la cosa más fácil para disminuir el consumo general de energía de un microcontrolador? ¿A qué te rindes al hacerlo?

Digamos que una sección de código debe ser “atómica”, ¿qué significa esto y cómo lo lograrías?

¿Qué es una IVT?

Explicar la diferencia entre las arquitecturas de von Neumann y Harvard.

¿Qué es un “NOP”? ¿Por qué se usaría?

Explica la diferencia entre un temporizador de bloqueo y uno sin bloqueo.

¿Qué es el registro “A” en la mayoría de los microcontroladores y para qué se utiliza?

¿Qué fase de desarrollo integrado suele ser la más larga?

¿Qué herramienta (hardware o software) es la más utilizada en un proyecto integrado?

Nombra al menos 2 “reglas generales” convencionales usadas comúnmente en el desarrollo de ISR.

Nombre al menos una cosa que diferencie un DSP de un microcontrolador estándar.

¿Cuál es la diferencia entre código reubicable y no reubicable?

Explique el cambio de rebote del interruptor, por qué es necesario y al menos 2 métodos para implementarlo.

¿Cuál es la diferencia entre RMS y “Peak to Peak”? ¿Por qué te importaría?

Rápidamente, sin buscarlo, ¿cuál es el valor decimal de OxFFFF?

Por lo general, es programación de bajo nivel usando C, C ++ y ensamblaje. Deben tener conocimiento de estos lenguajes, administración de memoria, subprocesos y saber un poco sobre hardware como el diseño de circuitos.

Se les paga aproximadamente lo mismo que la mayoría de los otros ingenieros de software que oscilan entre 50K y 150K USD al año.

Para obtener más información sobre lo que hacen ver:
¿Qué hacen realmente los ingenieros de sistemas integrados?