Un planificateur de tâches vraiment simple et non préemptif.
Il s'agit d'un planificateur de tâches super simple et non préemptif. Ce projet de démonstration a été réalisé dans Atmel Studio 7 pour le microcontrôleur ATMEGA48P, mais peut être porté facilement.
Le point de ce planificateur est d'appeler et d'exécuter chaque tâche avec une périodicité sélectionnée.
Le planificateur est à l'intérieur du dossier OS (OS.C et OS.H). Bien que ce ne soit pas un système d'exploitation, je l'appelle toujours, car la dénomination est plus facile de cette façon (le système d'exploitation est plus court, que Scheduler, duh).
Il existe trois fonctions principales et importantes:
Il y a trois États:
Bloqué: attend un appel de la minuterie
Prêt: prêt pour l'exécution
Suspendu: handicapé, je ne fera rien
Figure 2. Diagramme d'état des tâches.
OS_Tasktimer () est la fonction, qui organise les tâches. Il doit être dans une interruption de minuterie (dans la démo, c'est une minuterie de 1 sec, mais peut être n'importe quoi). Il y a un compteur à l'intérieur de la fonction. Si le comptoir est plus grand, alors l'heure d'éclatement de la tâche, elle la met dans un état prêt.
Figure 3. Diagramme d'activité de OS_Tasktimer ().
OS_TASKEXECUTION () est la fonction, qui appelle les tâches. Il doit être dans la boucle infinie principale (). Il vérifie s'il y a des tâches prêtes, puis les exécute dans un style FIFO. Il convient de mentionner que pour cette raison, il est tout simplement doux en temps réel. Si vous choisissez les horaires erronés, il pourrait y avoir trop de tâches dans l'état prêt et les retards indésirables pourraient se produire.
Figure 4. Diagramme d'activité de OS_TASKEXECUTION ().
La démo est destinée à montrer comment fonctionne le planificateur. Il y a trois tâches et chaque tâche clignote une LED (sur le port D 0,1,2) avec 1, 2 et 5 secondes. La deuxième tâche commence à l'état suspendu, il n'est donc jamais exécuté.