Un programador de tareas realmente simple y no preventivo.
Este es un programador de tareas súper simple, no preventivo. Este proyecto de demostración se realizó en Atmel Studio 7 para el microcontrolador ATMEGA48P, pero se puede portarse fácilmente.
El objetivo de este planificador es llamar y ejecutar cada tarea con una periodicidad seleccionada.
El planificador está dentro de la carpeta OS (OS.C y OS.H). Aunque no es un sistema operativo, todavía lo llamo sistema operativo, porque el nombre es más fácil de esta manera (el sistema operativo es más corto que el planificador, duh).
Hay tres funciones principales e importantes:
Hay tres estados:
Bloqueado: espera una llamada del temporizador
Listo: listo para la ejecución
Suspendido: discapacitado, no hará nada
Figura 2. Diagrama de estado de las tareas.
OS_TaskTimer () es la función, que organiza las tareas. Debería estar en una interrupción del temporizador (en la demostración es un temporizador de 1 segundo, pero puede ser cualquier cosa). Hay un contador dentro de la función. Si el mostrador es más grande, entonces la tarea explota el tiempo, lo pone en estado listo.
Figura 3. Diagrama de actividad de OS_TaskTimer ().
OS_TASKEXECUCIONS () es la función, que llama a las tareas. Debe estar en el bucle infinito principal (). Verifica si hay tareas listas y luego las ejecuta en un estilo FIFO. Vale la pena mencionar que debido a esto, es solo un tiempo real suave. Si elige los tiempos mal, entonces podría haber demasiadas tareas en el estado listo y pueden ocurrir retrasos no deseados.
Figura 4. Diagrama de actividad de OS_TaskExecution ().
La demostración está destinada a demostrar cómo funciona el planificador. Hay tres tareas y cada tarea parpadea un LED (en el puerto D 0,1,2) con 1, 2 y 5 segundos. La segunda tarea comienza en estado suspendido, por lo que nunca se ejecuta.