¿Cuál es la lista de habilidades que debe tener todo ingeniero de software integrado?

Escribir software incrustado requiere habilidades muy diferentes de las que exige el software empresarial. En particular, los ingenieros de software integrados deben tener una perspectiva completa del sistema y comprender los conceptos de bajo nivel de cómo el software “habla” con el hardware subyacente.

Desde un punto de vista teórico , el estudio de las siguientes áreas es importante:

1.) Organización informática

Visualización de los componentes que componen el sistema. Se supone que conoce el diseño de hardware del sistema integrado cuando escribe software para el mismo. En otras palabras, uno debe conocer los diferentes periféricos conectados al sistema y los buses involucrados.

2.) Sistemas operativos

El software básico necesario para ejecutar cualquier sistema. Esto es en lo que un ingeniero de software integrado trabajaría principalmente. Pero lo más importante, a diferencia de los sistemas de escritorio, el software del sistema operativo para sistemas integrados tiene un gran espacio de diseño. Esto se debe a que hay múltiples optimizaciones y compensaciones permitidas, dependiendo del propósito del sistema. Compare esto con un sistema de escritorio de uso general donde tendría casi todo el hardware rudimentario. Los recursos son limitados en un sistema integrado, por lo que debe estar familiarizado con cada uno de ellos para saber qué no incluir en el diseño.

Ahora, desde el punto de vista de la implementación , hay varias herramientas que, si dominas, pueden facilitar un poco tu vida. Los enumero aquí en (IMO) orden decreciente de utilidad. Recomendaría explorar las características de cada uno y tratar de desarrollar sus propios hábitos de trabajo.

Lenguaje de programación de bajo nivel : AFAIK, solo me vienen a la mente C y ensamblaje.

Domina tus conceptos de C. Eso debería enviarle automáticamente conceptos de búsqueda sobre cómo funcionan el software y el hardware al unísono.

Este debería ser un buen comienzo: PUZZLES C, algunos problemas C interesantes

Navegador de origen : cscope funciona bien para las bases de código C y C ++.

Tutorial de Vim / Cscope

Uso de un editor avanzado : Vim es mi favorito. La idea básica es editar mediante programación. Por ejemplo, usar macros para agrupar una secuencia de comandos y luego ejecutarla en varias secciones del archivo. Junto con cscope, vim lo ayuda a desarrollar un buen flujo de trabajo. Las funciones de múltiples ventanas son una bendición absoluta. La capacidad de ir y venir entre las interfaces cscope y vim grita “buena integración”.

Siete hábitos de edición de texto efectiva

Scripting : recomendaría familiarizarse con Python y Bash, especialmente para el formato de texto. Soy un gran fanático de unir varias herramientas de procesamiento de texto para formar una diseñada específicamente para mi propósito.

Dive Into Python es un buen libro para programadores.

Control de versiones : no es inevitable, pero seguramente es algo que agradecería por aprender.

Yo recomendaría GIT. Git – Libro

En base a mis casi 40 años de trabajo en el campo de los sistemas integrados, estos son, en mi humilde opinión, las habilidades / conocimientos mínimos “imprescindibles”:

  • Una buena comprensión de la electrónica analógica digital y de pequeña señal.
  • Capacidad para leer y comprender esquemas.
  • Posibilidad de utilizar eficazmente un medidor de voltios / ohmios y un osciloscopio.
  • Capacidad para realizar al menos la depuración / resolución de problemas electrónicos básicos.
  • Competencia en al menos un lenguaje ensamblador.
  • Competencia en el lenguaje de programación ‘C’.
  • Una buena comprensión de los componentes internos del microprocesador (principalmente los registros).
  • Una comprensión de las regiones de memoria y sus usos (montón, pila, IVT, código).
  • Trabajando con números hexadecimales y matemática hexadecimal.
  • Una muy buena comprensión de las matemáticas booleanas (lógica).
  • Un excelente conocimiento de qué son las interrupciones y cómo funcionan en código.
  • Una comprensión de los diferentes tipos de memoria (RAM, ROM, Flash), las diferencias entre ellos y cómo se leen, escriben y acceden.
  • Una comprensión de la multitarea (en el mundo incrustado usamos el término original “multitarea”. El término “multitarea” fue un término que alguien inventó más tarde para significar exactamente lo mismo. Lo que otros llaman “hilos” nosotros han llamado “tareas” desde la década de 1970).
  • Posibilidad de utilizar un depurador para realizar al menos operaciones simples, como establecer puntos de interrupción, un solo paso, examinar valores variables, examinar la memoria, examinar registros, y comprender cuándo habilitar y deshabilitar las interrupciones cuando se realiza un solo paso con un depurador.
  • Capacidad para depurar código multitarea.
  • La capacidad de leer y comprender hojas de datos y producir código de controlador para un dispositivo determinado en función de la información contenida en su hoja de datos.
  • Comprender las ventajas y desventajas de usar un bucle de primer plano con interrupciones frente a usar un núcleo multitarea.
  • Desarrollo de código para ejecutar bajo un RTOS (Sistema operativo en tiempo real), y cómo usar semáforos, mutexes, colas, comunicaciones entre tareas.
  • Cómo desarrollar y depurar código para periféricos como UART, convertidores A / D y D / A, temporizadores, generación PWM desde un temporizador, relojes en tiempo real, etc.
  • Cómo desarrollar y depurar código para comunicaciones utilizando RS-232 (y sus variantes), SPI, I2C y puertos de datos paralelos.
  • Cómo desarrollar y depurar código con pilas, colas, listas enlazadas y otras construcciones de datos comunes.
  • Una buena comprensión de DMA (Acceso directo a memoria) y cómo implementarlo para sistemas que tienen capacidad DMA.

Con más tiempo, estoy seguro de que podría haber encontrado algunos más, pero el tiempo es el recurso que menos tenemos.

Habilidades básicas para el sistema integrado: –

a. Buenas habilidades de codificación en C (o C ++): muy buen conocimiento del lenguaje C es un buen punto de partida. Los libros sugeridos son K&R, programación Expert C, etc. Tenga un buen dominio de los punteros, las asignaciones de memoria y la manipulación de bits.

si. Depuración y resolución de problemas: esta es una habilidad crucial en este dominio, ya que la mayor parte del tiempo se dedica a depurar el código de otras personas. Como buen ingeniero, tendrías habilidades esenciales para comenzar.

C. Conceptos de sistemas operativos: un curso básico de nivel de pregrado sería mejor si conoce el sistema y los núcleos en tiempo real, pero no es obligatorio.

re. Arquitectura de la computadora: especialmente el conocimiento de cualquier arquitectura RISC, se recomienda conocer la arquitectura ARM, ya que la mayoría de los dispositivos integrados utilizan ARM IP en su SOC.

Otras habilidades avanzadas requeridas se basan en el dominio que desea trabajar, como Wireless o DSP. Para esto, es mejor comprender las comunicaciones inalámbricas (principalmente protocolos) y DSP (audio y video).

Haga clic aquí para obtener más detalles: – Capacitación sobre sistemas integrados en Noida

Sigue aprendiendo 🙂

More Interesting

¿Cuáles son los mayores desafíos para los desarrolladores de iOS a tiempo completo?

¿Cuál es el mejor tutorial de SQL para probadores de software?

¿Qué pasaría si las compañías de software como Microsoft o Apple lanzaran sus bases de código?

¿Es el desarrollo ágil algo real, o incluso vale la pena aprenderlo? ¿Es una broma?

¿Cómo comienzas a construir software desde cero? ¿Qué idioma uso? Si quiero que el programa pueda integrarse con otros, ¿qué debo considerar? ¿Dónde puedo aprender todo lo básico?

¿Puedo trabajar en un lugar con muchos ingenieros a la edad de 15 años?

¿Qué lenguaje sería el mejor para presentar a un niño de 14 años a la programación? ¿Sería un lenguaje de programación funcional una mejor opción?

¿Cómo está su organización actualmente haciendo un seguimiento de sus políticas y procedimientos? ¿Cuáles son sus principales problemas con su sistema actual?

¿Cuál es la principal diferencia entre las API y el software?

Cómo convertir una unidad a un disco MBR (unidad básica)

¿Qué es un día normal de trabajo para un estudiante de ingeniería de software en el MIT?

¿Qué tipo de tecnología P2P es adecuada para la transmisión de video de Netflix?

Cuando codifica, ¿alguna vez siente que está perdiendo de vista lo que estaba haciendo conceptualmente en primer lugar? Como detienes eso?

¿Cuál es la relación de mejores prácticas de ingenieros frente a producto en compañías de software?

¿Cuál es el mejor software para hacer diagramas de red?