Estoy evaluando sistemas operativos para usar en un Proyecto de Internet de las Cosas y no sé cuál es la mejor manera de proceder.
Estoy usando un MCU TM4C123GH6PM con 32k de RAM y un transceptor CC2520 802.15.4, sería genial si el sistema ya proporcionara controladores para esos.
El sistema ejecutará una tarea (interactiva) que dibuja una pantalla de matriz de puntos y reacciona a la entrada del usuario. Almacenará la configuración y los datos de la aplicación en spi flash. Habrá una malla de módulos múltiples (basados en 802.15.4) para sincronizar datos entre los módulos, extraer datos de sensores de los módulos y enviarlos a una puerta de enlace (rpl viene a la mente) y también distribuir actualizaciones de firmware OtA en forma de chismes. como la moda Todo mientras se ejecuta una aplicación que consume mucha memoria también.
Hasta ahora he investigado estos sistemas:
RIOT :
pros
- buena abstracción de hardware
- huella pequeña
- comunidad muy activa y útil
- pila 802.15.4 / 6LoWPAN completa
cons
- inestable, aún en cambios fundamentales
- todavía contiene condiciones de carrera / accidentes
- no hay soporte para el sistema de archivos
- algunos protocolos de red
Contiki :
pros
- sistema maduro, usado en productos comerciales
- pila 802.15.4 / 6LoWPAN completa con muchos protocolos útiles
- soporte del sistema de archivos
- compatibilidad con cc2520
cons
- el desarrollo se ha vuelto obsoleto
- base de código 'crecido', mucha pudrición de bits
- mala calidad tiva c port
- poco soporte para plataformas modernas
- la programación no preferente puede causar problemas con la aplicación
FreeRTOS :
pros
- poca complejidad adicional
- programador confiable y fácil de usar
- proyecto maduro, usado en muchos productos
- muchos puertos
cons
- no hay sistema de archivos
- sin abstracción de hardware para controladores / sin controladores de hardware
- sin pila de red
- uso un tanto alto de memoria dinámica
NuttX :
pros
- muy rico en características, casi parece Linux, pero aún así pequeño
- soporte del sistema de archivos
- buena abstracción de hardware
- Puerto Tiva C, muchos otros puertos
cons
- algo complejo
- no hay soporte para 802.15.4 / 6LoWPAN, solo netstack 'clásico'
Mi conclusión sería tomar las partes buenas de Contiki (el netstack, el sistema de archivos) y trasladarlas a FreeRTOS. Pero no estoy del todo cómodo con un tenedor como ese. Probablemente estaría agregando errores y no sería capaz de realizar una copia de seguridad de los arreglos en sentido ascendente, también tengo que inventar mi propia abstracción de hardware para poder cambiar la MCU en el futuro. Así que terminaría con mi propio sistema operativo por algo que parece ser un problema que muchas otras personas también deberían tener. ¿Alguien no lo ha hecho antes? (Quiero decir que encontré algo, pero la idea de ejecutar todo el contiki-os como una tarea de FreeRTOS me hace incómodo)
¿Hay algo que me falta? ¿Tal vez el dolor valga la pena y debería intentar que Contiki alcance un estado funcional en mi hardware? ¿O hay algún otro sistema que no haya solucionado mis problemas?
Además, no estoy seguro de si necesito 6lowPan en absoluto, pero cuando eso signifique poder construir sobre protocolos existentes / ser compatible con otros sistemas (por ejemplo, Linux), estaría dispuesto a asumir el costo adicional.