Pasos de programación de Ucos
Simplificado (ignorando algunos detalles), UCOS creará una tarea inactiva cuando se inicie. Esta tarea tiene la prioridad más baja y no se eliminará. Puede crear una nueva tarea llamando a OSTaskCreate y el sistema mantendrá una lista de tareas (TCB).
Una tarea tiene cuatro estados: durmiendo (puede entenderse como una tarea que ha sido eliminada de la lista de tareas), esperando, lista y ejecutándose (no se menciona en el libro, pero se puede entender que el estado de espera puede ser variado debido a razones).
El sistema ejecuta el proceso de programación de tareas en la función de manejo de interrupciones y ejecuta la tarea con la mayor prioridad y en el estado listo. Una vez que la programación se realiza correctamente, la tarea cambia del estado listo al estado en ejecución. Si no hay tareas para programar, se ejecutará la tarea inactiva.
Desde una perspectiva de programación:
1. Las interrupciones de hardware causarán programación, como interrupciones de E/S, que no necesitan detallarse.
2. Llamar a OSTaskCreae para crear una nueva tarea en la tarea actual provocará llamadas al kernel del sistema e interrupciones de la simulación. Dado que el sistema realiza la programación de tareas durante el procesamiento de interrupciones, si la nueva tarea tiene una prioridad más alta que la tarea actual, la nueva tarea se ejecutará inmediatamente.
3. Llamar a OSStart hará que el kernel del sistema llame, lo que generará una interrupción simulada. Debido a que el sistema realiza la programación de tareas durante el procesamiento de interrupciones, se ejecutará la tarea con la mayor prioridad y en el estado listo.
4. Llamar a OSTimeDly puede cambiar la tarea actual a un estado de espera, establecer el tiempo de espera y luego hacer que el kernel del sistema llame, lo que generará una interrupción simulada. Entonces se ejecutará otra tarea con la prioridad más alta y en el estado listo en la interrupción del reloj del sistema, una vez transcurrido el tiempo de espera, la tarea estará lista;
5. Las llamadas a funciones como ossimpend, OSMboxPend, OSQPend, etc. también harán que la tarea actual entre en un estado de espera, lo que luego hará que el kernel del sistema llame y genere una interrupción simulada. Por lo tanto, se ejecutará otra tarea con la prioridad más alta y en el estado listo; este estado de espera solo se puede liberar después de recibir la señal de activación.
6. La modificación de la prioridad de las tareas también provocará la programación.
La función de programación del sistema correspondiente a la interrupción de hardware real es OSIntExt, y la función simulada por otro software es OSSched.
En general, el principio de programación de UCOS es muy simple porque no existe el problema del concepto de intervalo de tiempo ni la inversión de prioridad.
Existen muchas versiones optimizadas o personalizadas de UCOS, la mayoría de las cuales tendrán su propio calendario de modificaciones. Tenga en cuenta.