Al igual que los ingenieros de software de escritorio, escriben código para resolver problemas e implementar sistemas.
A diferencia de los ingenieros de software de escritorio, a menudo necesitan:
– Trate con nuevo hardware / silicio, que puede tener errores. He trabajado en sistemas donde, debido a fallas de hardware, escribir un byte en la memoria y luego leerlo nuevamente me dio un valor diferente. Encuentra el problema, envíalo a los ingenieros de hardware y espera a que solucionen el problema.
- ¿Cuál es la diferencia entre una instrucción y una directiva en lenguaje ensamblador?
- ¿Es Arduino una buena introducción a la programación integrada?
- ¿Por qué son importantes los sistemas integrados, que son herramientas, dispositivos y equipos pequeños, rápidos y muy potentes que se han convertido en parte de nuestra vida cotidiana?
- ¿Cuál es el sistema de microcontrolador con Wi-Fi más barato? ¿Existe una solución de menos de $ 20 para que Wi-Fi habilite un dispositivo Arduino?
- ¿Se supone que un desarrollador incrustado realiza codificación de nivel de bit banging (spi / i2c) en las entrevistas?
– Haga rodar su propio sistema operativo, o al menos configure un sistema operativo para que se ajuste al diseño de hardware y al mapa de memoria de su sistema. Los ingenieros de software de escritorio esperan que se les proporcione un sistema operativo y no les preocupa cómo cobra vida ese sistema operativo o el mapa de memoria del hardware en el que se ejecuta. A menudo, estas son cosas que un ingeniero integrado debe atender, en algún nivel u otro. He tratado esto en diferentes niveles; una vez tuve la gran alegría de diseñar e implementar mi propio sistema operativo multitarea cooperativo para una placa personalizada para la que no existía ningún sistema operativo. Otras veces, solo se trata de configurar Linux embebido. En cualquier caso, necesitará conocer su hardware para hacer el trabajo correctamente.
– Preocuparse por los dispositivos. A veces, el hardware es nuevo o personalizado para el diseño. Otras veces, está listo para usar, pero no existe un controlador para su sistema operativo. En los sistemas de escritorio, el sistema operativo en sí proporciona el soporte necesario, pero es mucho más probable que necesite instalar el suyo en un sistema integrado, especialmente si el hardware es nuevo.
– Tratar con las limitaciones de memoria / recursos. Los sistemas integrados pueden, y a menudo lo hacen, tener recursos limitados de memoria y CPU, debido a restricciones comerciales, o el entorno / empaque en el que deben implementarse. La fragmentación de la memoria puede ser un problema grave. Dependiendo del diseño / dispositivo, a veces se deben utilizar esquemas de asignación de memoria personalizados para reemplazar los proporcionados por el proveedor del compilador para hacer frente a estas restricciones.
– Preste mucha atención a los problemas de fiabilidad, seguridad y corrección. Los sistemas integrados utilizados en el sistema de frenos de su automóvil, o en los sistemas de aviónica Boeing 777, no pueden fallar, porque las vidas dependen de ello. Esto a menudo significa que los ingenieros integrados pasan por niveles de especificación, prueba / control de calidad, revisiones de código, etc., a los que normalmente no somete a los desarrolladores de aplicaciones de escritorio. Los sistemas pueden tener componentes redundantes que computan u obtienen resultados de forma independiente o leen sensores, y usan algunas heurísticas como votar para obtener un resultado final que se informa al resto del sistema.
– Observar las limitaciones en tiempo real. Los desarrolladores de sistemas integrados a menudo tienen restricciones más estrictas con respecto a la rapidez con que los sistemas que implementan responden a los eventos, o emiten comandos para activar los controles. A menudo, el comportamiento correcto y las vidas pueden depender de cumplir con estas limitaciones de tiempo. Mientras que la comunicación entre un cliente / servidor a través de TCP / IP se puede volver a intentar hasta que se complete con éxito con una latencia observada por parte del usuario, las aplicaciones integradas en tiempo real fallarían en circunstancias similares. Las comunicaciones no deben perderse y las latencias deben ser mínimas. Los comandos para hacer que los alerones de un Boeing 777 se muevan en respuesta al comando del piloto deben ser altamente sensibles a la entrada de los pilotos.
– Desarrollar una estrategia de depuración. En mi experiencia, el desarrollo y la depuración de sistemas embebidos pueden ser un desafío. En algunos casos, para mí, ha significado encender LED o voltear bits en la RAM de video para detectar que mi código ha alcanzado un cierto punto de ejecución. Muchas veces, lo primero que hará un desarrollador es hacer que funcione un controlador de puerto serie e implementar printf para que las declaraciones de registro / rastreo puedan emitirse a través del puerto serie. Más idealmente (y probablemente) un desarrollador integrado con uso de JTAG, emulación en circuito, Nexus u otro mecanismo proporcionado por el diseño de hardware / cadena de herramientas para depurar sistemas integrados.