Pues sí, muy bueno y ayuda un montón, gracias RedPic, me has hecho ver que iba por buen camino.
Yo tento un problema similar: recibir órdenes sencillas desde una linea serie RS485 y procesarlas interpretando los parámetros (si es que el comando va dirigido a esa unidad).
Como los comandos tienen un determinado formato conocido, en mi caso entiendo que mejor que usar un buffer en el que almacenar los comandos y parámetros en la subrutina de interrupción, es que ésta vaya ya interpretando el comando y almacenando los varlores de los parámetros, una solución parecida pero en la que no almaceno los caracteres tal cuál, si no que leo los números en variables (ya que los parámetros son numéricos y se transmiten como números hexadecimales).
Eso me permite ahorrar memoria ¿no creen?
El método de procesar los comandos en la subrutina de interrupción (separando los parámetros) y levantar un flag cuando finaliza el comando, me permite también usar el modo de tiempo real, las subrutinas RTOS del pic.
La subrutina que ha de interpretar los comandos, la meto en un task, y ésta espera en el flag que indica la llegada de un comando, dejando así al procesador que pueda hacer otras cosas en otras tareas task.
Intenté previamente leero los comandos directamente en el task, esperando por el kbhit (rtos_await(kbhit)), pero resultó ser bastente complicado y confuso, ya que no podía partir la subrutina de intérprete de comandos en otras funciones, pues las instrucciones rtos_await únicamente pueden estar directamente metidas en la función declarada como task, y no se pueden poner en ninguna función.
Así que creo que la solución será hacer la interpretación (parsing) de los comandos en la subrutina isr_ad y advertir mediante una variable flagcommand cuando un comando ha finalizado.
En la tarea de ejecución de los comandos, será suficiente con hacer entonces un rtos_await(flagcommand != 0).