Um agendador de tarefas realmente simples e não preventivo.
Este é um agendador de tarefas super simples, não preventivo. Este projeto de demonstração foi feito no Atmel Studio 7 para o microcontrolador ATMEGA48P, mas pode ser portado facilmente.
O objetivo deste agendador é ligar e executar todas as tarefas com uma periodicidade selecionada.
O agendador está dentro da pasta do sistema operacional (OS.C e OS.H). Embora não seja um sistema operacional, ainda o chamo de OS, porque a nomeação é mais fácil dessa maneira (o sistema operacional é mais curto do que o Scheduler, DUH).
Existem três funções principais e importantes:
Existem três estados:
Bloqueado: espera por uma chamada do timer
Pronto: pronto para execução
Suspenso: desativado, não fará nada
Figura 2. Diagrama de estado das tarefas.
OS_TaskTimer () é a função, que organiza as tarefas. Deve estar em uma interrupção do timer (na demonstração, é um temporizador de 1 segundo, mas pode ser qualquer coisa). Há um contador dentro da função. Se o balcão for maior, então a explosão da tarefa, ela a coloca em estado pronto.
Figura 3. Diagrama de atividades de OS_Tasktimer ().
OS_TASKEXECUTION () é a função, que chama as tarefas. Deve estar no loop principal () Infinite. Ele verifica se há alguma tarefa pronta e as executa em um estilo FIFO. Vale mencionar que, por causa disso, é apenas em tempo real suave. Se você escolher os horários errados, pode haver muitas tarefas em estado pronto e atrasos indesejados podem acontecer.
Figura 4. Diagrama de atividade de OS_Taskexecution ().
A demonstração tem como objetivo demonstrar como o agendador funciona. Existem três tarefas e cada tarefa pisca um LED (na porta d 0,1,2) com 1, 2 e 5 segundos. A segunda tarefa começa no estado suspenso, para que nunca seja executado.