¿Por qué las estructuras de datos y los algoritmos son tan importantes para un ingeniero de software integrado?

En primer lugar, debe centrarse principalmente en C, no en C ++. Pero debe tener alguna comprensión de C ++. También es posible que desee aprender sobre el ensamblaje en general, entendiendo cómo funciona. Pero como cada tipo de dispositivo incorporado tiene su propio conjunto de instrucciones, no es muy útil aprender solo un lenguaje ensamblador, ya que solo sería útil para ese tipo específico de hardware.

Conocer las estructuras de datos es importante ya que los dispositivos integrados generalmente tienen pequeñas cantidades de memoria y debe usarlo de la manera más óptima. Por ejemplo, debe saber cómo se alinean los datos en la memoria y cómo se almacenan exactamente los datos en la memoria.

Pero no solo debe guardar los bytes en los datos, sino también la velocidad del reloj. Debe poder escribir soluciones que brinden el mejor rendimiento en velocidad, ya que la mayoría de los sistemas integrados funcionan a velocidades de reloj de hace 20, 30 años. A menudo tienen velocidades que aún se expresan en megahercios, no en gigahercios o terahercios. Los dispositivos integrados generalmente necesitan un tiempo de respuesta y un tiempo de procesamiento extremadamente rápidos, ya que hay un usuario que acaba de presionar un botón y quiere ver el resultado en alguna pantalla LCD o alguna acción que el dispositivo realizará.

Las estructuras de datos y los algoritmos son importantes para todos los ingenieros de software, especialmente aquellos que no usan lenguajes de programación con estructuras y algoritmos de datos integrados, como el lenguaje de programación C. Sin embargo, los programadores de C pueden usar bibliotecas disponibles con estructuras de datos y algoritmos comunes, pero el software incorporado tiene requisitos muy particulares en términos de complejidad computacional, restricciones de memoria y volatilidad de los datos, y la mayoría de las veces los ingenieros de software incorporado deben desarrollar estructuras de datos y rutinas específicas arquitecturas de hardware

Por ejemplo, en la industria automotriz, los programadores de C deben codificar con el estándar MISRA, un conjunto de reglas muy restrictivo para minimizar los eventos no controlados en software crítico.

Creo que son importantes, porque con los sistemas embebidos vuelves al pasado. En el pasado, el tamaño de la memoria, la velocidad y los programas pequeños y rápidos eran importantes. Es por eso que todavía encuentra los programas / sistemas FORTH en dispositivos integrados. Y también encuentra versiones “incrustadas” de C, ensamblador “específico del dispositivo”, etc. Un buen diseño de estructura de datos y algoritmos buenos y eficientes son muy importantes, y debe deshacerse de las toneladas de módulos de tiempo de ejecución, que se encuentran en la programación promedio. vida.

More Interesting

¿Cuál es la definición de. ¿Sitio web que se basa en una red de API o servicios más pequeños en comparación con un solo servicio grande?

¿Cuál es la filosofía de los buenos codificadores? Solía ​​poner mucho esfuerzo en mis cursos, pero siento que los proyectos paralelos y la construcción de cosas que son importantes para el mundo exterior importan mucho más.

Si fuera a escribir un nuevo sistema operativo con un objetivo de IA, ¿qué idioma y proyectos de código abierto utilizaría para ayudarlo?

¿Cuáles son los mejores ejemplos de errores de software que se convirtieron en características (también conocidos como errores)?

¿Cuáles son las desventajas de usar Cython vs. C / C ++?

¿Cuál es la pila tecnológica de SurveyMonkey?

¿Los programadores piensan que su trabajo es más fácil que los trabajos en la mayoría de los campos de ingeniería y científicos?

¿Cuál es el lenguaje más importante para desarrollar software de computadora?

¿Cómo te conectas remotamente a tus computadoras?

¿Cuál es la mejor manera de recopilar y priorizar las mejoras de software?

Cómo desarrollar un mapa de riesgos

¿Qué lecciones debo aprender en Java que me basten para ser probablemente deseable como programador de Java?

¿Qué debo hacer para mejorar mis habilidades de codificación? Soy un estudiante de ingeniería de software de último año. He realizado varios proyectos de software pequeños durante 3 años. Aprendí C ++ básico, C #, PHP, Java y Swift, pero mis habilidades de programación son bastante malas.

Cómo aceptar el hecho de que no soy inteligente y que nunca conseguiré un trabajo de ingeniero de software en Google

Noté que muchos ingenieros de software prefieren programar en Linux, pero acceden de forma remota a través de una computadora portátil OS X. ¿Volvemos a la configuración de terminales / mainframes?