Yo de RTOS conozco solo el concepto, me gustaría implementarlo en un proyecto que estoy haciendo, pero no estoy seguro si funcionará, ya que dicho proyecto trata de procesar voz a 8 khz y guardar dichos datos, habría que determinar los retardos involucrados, en este caso sería bajo el compilador CCS.
Te comento PalitroqueZ que la latencia de un RTOS de estas caracteristicas es totalmente dependiente de: Vos!
EL "Scheluder" busca la tarea de mas alta prioridad que este en condiciones de correr (que sea su turno).
Una vez llamada la tarea, la duracion de un "slice" de la misma depende del mismo programador (uno mismo ubica el "Yield" para entregar el procesador al "scheluder" donde uno quiere).
Los programas en interrupciones se siguen realizando de la misma manera que siempre solo que se utilizan eventos propios del RTOS para informar resultados (los semaforos).
Las demoras o esperas que uno le pide al RTOS en una tarea no generan latencia ni consumo de micro ya que no se queda en dicho lugar esperando su resolucion, lo realiza el RTOS de manera eficiente.
Es mas, es mucho mas probable que responda mucho mas rapido un RTOS que un programa en C clasico, a menos que en tu programa agregues cuando queres volver a atender dicho proceso ademas del evento, sino estarias entrando innecesariamente un monton de veces a una tarea que no lo requiere, consumiendo tiempo util.
EJ programas C clasico no optimizado y optimizado (solo ejecuta y analiza cuando debe):
Caso 1:
while (1) //Superloop de tareas
{ejecutatarea1();//Cada vez que pasa por aca la ejecuta
ejecutatarea2();//Cada vez que pasa por aca la ejecuta
ejecutatarea3();//Cada vez que pasa por aca la ejecuta
}
Caso 2:
while (1) //Superloop de tareas
{if (tarea_1_enable&&tarea_1_timeout){ejecutatarea1();}//Solo cuando esta habilitada ejecuta
if (tarea_2_enable&&tarea_1_timeout){ejecutatarea2();}//Solo cuando esta habilitada ejecuta
if (tarea_3_enable&&tarea_1_timeout){ejecutatarea3();}//Solo cuando esta habilitada ejecuta
}