procesador - Diferencias cuantificables entre núcleos RTOS para microcontroladores ARM pequeños
que es arm en español (1)
Algunas de las características que uno podría tener en cuenta al elegir el RTOS:
- tiempo de cambio de contexto
- interrumpir la latencia
- mecanismos de sincronización (banderas, semáforos, mutexes, buzones, colas, ...)
- manejo de inversión de prioridad
- soporte de gestión de memoria (es decir, grupos de memoria)
- soporte de políticas de programación
- Soporte MMU
- soporte de proceso
- huella de memoria
- eficiencia del kernel en sí
- API POSIX vs. API no POSIX
- software del ecosistema disponible (también conocido como middleware)
- ...
El (los) punto (s) para enfocar más depende de la aplicación que va a ejecutar. Pero en general, estas son las cosas que recuerdo que hacen la diferencia entre varios RTOS.
Hay muchos RTOS diferentes disponibles para microcontroladores. Estoy buscando específicamente RTOS que admitan los procesadores ARM Cortex M. Además, no estoy interesado en soluciones de código cerrado.
Intentar comparar los méritos relativos de cada RTOS de sitios web y listas de correo parece bastante difícil, ya que en su mayoría parecen tener características equivalentes y hacer lo mismo. Las diferencias reales se vuelven aparentes solo después de intentar usar cada RTOS para algunas tareas.
Sé que esta es una pregunta un tanto subjetiva y probablemente difícil de responder, pero debe haber muchas personas que hayan probado varios RTOS diferentes y formado una opinión sobre los méritos relativos de cada uno.
Estoy específicamente interesado en FreeRTOS, ChibiOS y Coocox CoOS, pero otras opciones también son bienvenidas.
Por ejemplo: parece que en ChibiOS, los ISR pueden llamar a cualquier función del sistema, pero esas llamadas deben estar envueltas en chSysLockFromIsr()
/ chSysUnlockFromIsr()
y el código no se puede prevalecer durante esas secciones. En CoOS, las únicas funciones invocables son las que comienzan con isr_
como isr_PostSem()
, isr_PostMail()
, isr_PostQueueMail()
e isr_SetFlag()
, pero esas funciones usan internamente una cola de solicitud de servicio, lo que significa que la mayoría de la solicitud es preemptable.