¿No estás seguro de si te estás acercando a esto como desarrollador, como investigador informático?
Los desafíos (muchos de los cuales se aplican a cualquier software) incluyen:
- (Todos) entendiendo correctamente el problema.
- (Todos) entendiendo correctamente los objetivos del proyecto.
- Diseño.
- Cambios de requisitos.
- Calendario de proyectos comprimido.
- Comunicar correctamente el diseño a todos los desarrolladores involucrados.
- Complejidad de manejo. Hay muchas partes que interactúan.
- Subdivisión de problemas a resolver en múltiples procesadores.
- Prueba.
- Comprender y diseñar los tiempos del peor de los casos.
- Depuración
– Visibilidad del estado interno en los procesadores N
– No solo comprender la operación prevista, sino descubrir dónde salió mal, qué lo desencadenó, qué hacer al respecto. - Fallos de manejo, condiciones de contorno, casos límite y sus combinaciones:
– El procesador 4 deja de funcionar.
– Tarea 2, el procesador 3 a veces deja de responder. ¿Por qué?
– Tarea 3, el procesador 3 todavía responde, pero tarde. ¿Por qué?
– Tarea 4, el procesador 6 desborda su pila de forma intermitente. ¿Por qué?
– Procesador 27, el puerto 3 tiene una alta tasa de error de bits. ¿Por qué?
– El procesador 15 a veces no aparece en el arranque. ¿Por qué?
Algunas reflexiones sobre cómo mejorar:
- ¿Por qué la mayoría de los circuitos integrados fabricados por Intel comienzan con 8 (por ejemplo, 8086, 8051, 8284)?
- ¿Hay alguna guía relacionada con el microcontrolador para conocer los conceptos básicos del microcontrolador?
- ¿Con qué frecuencia se usa el lenguaje C en sistemas militares integrados para una forma de disparadores de respuesta automática para armas?
- ¿Puede el sistema operativo modificar la tabla de vectores de interrupción del microcontrolador cuando está paravirtualizado?
- Cómo relacionar Kernel Development, Embedded Systems, Robotics and AI
- Las mejores herramientas que puedes conseguir.
- Herramientas de visualización.
- Herramientas de inspección de código automatizadas.
- Mejores prácticas para el desarrollo: pruebas unitarias, TDD, pruebas automatizadas, Agile / XP, revisiones de código, programación de pares, etc.
- ¿Quizás una arquitectura de sistema síncrono regular?
- Documentación.