Je souhaiterai partager mon propre Tiny Kernel (pico noyau) coopératif développé en langage C pour gérer des tâches sur n'importe quel microcontrôleur. Vous pouvez créer une tâche avec une période d'exécution, la suspendre, la redémarrer et changer sa périodicité à n'importe quel moment. Ce pico noyau peut aussi supprimer toutes les tâches en cours de fonctionnement et créer facilement un autre séquenceur à vos souhaits. Par exemple lors de la gestion des modes de fonctionnement (veille, arrêt, nominal).
Une fonction TickGet est fournie avec le noyau pour gérer tous les timers virtuels que vous voulez.
Actuellement ce noyau a été développé sous linux et compilé à l'aide de gcc en émulant un timer à l'aide de la librairie "time.h". Donc pour faire fonctionner ce kernel, vous avez juste à créer un timer d'interruption sur votre microcontrôleur par exemple un timer 1 ms pour obtenir un gestionnaire des tâches pour vos propres applications embarquées.
Pour résumer au niveau du fonctionnement de ce noyau:
Il est basé sur une liste chaînée circulaire permettant de switcher d'une tâche à l'autre en prenant en compte la périodicité propre à chaque tâche.
Par exemple si vous voulez faire clignoter une led, on peut définir une tâche qui s'exécutera toutes les 500ms. A chaque appel de la tâche, le port relié à la Led basculera de l'état haut à l'état bas et de l'état bas à l'état haut.
Ce kernel a été volontairement écrit d'une façon générale pour aider les gens à le personnaliser pour leurs propres applications.
Vous trouverez le code source et un descriptif en anglais ici
-----