¿Cuáles son los lenguajes de programación esenciales, además de C incrustado, para aprender para una buena carrera en un dominio de sistema embebido?

Para ser un buen desarrollador de sistemas integrados, no es suficiente dominar uno o más lenguajes de programación, sino que necesita saber mucho más.

En general, las personas que provienen de la experiencia de “Desarrollo de software basado en PC de escritorio” no se dan cuenta de la importancia de conocer otras cosas que son críticas para ser un buen desarrollador de sistemas integrados y se centran más en aprender solo lenguajes de programación. Aunque tener dominio del lenguaje de programación es imprescindible pero no suficiente.

Generalmente, C, C ++ con un código de ensamblaje en línea se utiliza en la mayoría de los sistemas integrados. Hay sistemas que ejecutan JAVA, código Python también. A medida que el hardware subyacente se está volviendo más poderoso en términos de velocidad, soporte de memoria, etc., las personas están explorando para construir aplicaciones integradas que no sean solo c, c ++.

Entonces, ¿qué otras cosas debe saber un desarrollador de sistemas integrados?

  • Los desarrolladores de sistemas integrados trabajan estrechamente con el desarrollo de código que habla con el hardware. Es necesario tener una buena comprensión del hardware, los circuitos, el registro, la lectura de la hoja de datos y poder escribir código, analizar esquemas, etc.
  • Si trabaja en sistemas basados ​​en sistemas operativos como RTOS o sistemas basados ​​en Linux, debe tener un buen conocimiento de cómo funcionan estos sistemas operativos y cómo desarrollar programas basados ​​en estos sistemas operativos
  • En general, las personas prefieren usar Linux en lugar de otros sistemas operativos comerciales en tiempo real para reducir el costo de desarrollo. Las habilidades de Linux son muy importantes para trabajar en sistemas embebidos. Desarrollo de aplicaciones basadas en Linux, GCC, Makefile, Eclipse, gestión de procesos, gestión de memoria, Linux IPC, sockets BSD, llamadas al sistema Linux, desarrollo del módulo Linux Kernel y scripts de Linux Bash
  • Herramientas de desarrollo y depuración: JTAG, GDB, KDB, Hyperterminal, TCPdump, CAN Analyzer, etc.
  • Formatos de archivo binario: COFF, Srecord, Bin, Intel Hex, .out ,. exe, etc. y cómo actualizar los archivos binarios en dispositivos Flash
  • Técnicas de optimización de código, usando herramientas de análisis de código estático y dinámico, herramientas de cobertura de código, análisis de tiempo, medición de tiempo
  • El conocimiento del uso de Multímetro, CRO, Analizador lógico, Generador de funciones es una ventaja adicional
  • Uso de herramientas de gestión de configuración como SVN, Clearcase, Git, etc.
  • Desarrollo de scripts para probar el hardware y pruebas de fin de línea
  • Desarrollo de herramientas para actualización de firmware de fábrica, actualización de firmware por lotes, etc.
  • Conocimiento del proceso de desarrollo de software.

Espero que esto ayude.

Unas pocas variedades de ensamblador es todo lo que es realmente necesario; ARM y AVR lo harían para empezar. C ++, Rust, Lua y Python no harían daño.

Pero también necesita aprender todo sobre ingeniería de software, especialmente cómo funcionan los sistemas de compilación. Eso significa scripting de shell, makefiles, muchas otras herramientas de construcción, git, mercurial. Debe poder reducir la creación del firmware para un dispositivo y cargarlo en un solo comando, o con un solo clic en un formulario web, o una función que su sistema de integración continua pueda invocar para ejecutar las pruebas.

Aprenda cómo probar el software y cómo hacer una prueba de hardware en el bucle.

También debe aprender a leer la hoja de datos de un chip y los conceptos básicos de cómo leer un esquema; eso hace que escribir controladores de dispositivos sea mucho más fácil.

Alguien ya mencionó que será útil aprender los conceptos básicos de uno o más lenguajes ensambladores. Incluso si nunca escribe ningún ensamblador, ayuda a depurar y optimizar el código C. Asimismo, aprender los conceptos básicos de make o algún otro lenguaje de construcción.

También creo que la mayoría de los ingenieros integrados terminan aprendiendo un lenguaje de script como python o perl. A menudo, para depurar un sistema integrado, termina volcando algún tipo de datos de rastreo y que normalmente necesita pasar en algún tipo de formato legible. También muchos depuradores admiten scripting en algún tipo de lenguaje. LLDB (que también es una cadena incorporada popular) es compatible con Python, ya que es un lenguaje de scripting de depuración.

Suponiendo que planea ser un profesional, necesitará saber todo sobre el control de fuente, etc. Tenemos muchas herramientas de phthon que interactúan con nuestro sistema de control de revisión (usamos forzosamente) para personalizar su funcionalidad.

A menudo, los ingenieros integrados probarán su código en simuladores de hardware que se ejecutan en una PC o servidor. Estos pueden escribirse en cualquier lenguaje, pero si están escritos por el equipo integrado, a menudo están en C o C ++, ya que eso es lo que la mayoría de la gente sabe. El nuestro es C ++ con ganchos de python.

Si está preguntando acerca de los lenguajes reales para programar el sistema embebido, en toda mi carrera de 18 años nunca he visto un anuncio de trabajo para otra cosa que no sea C, C ++ o ensamblador.