RTOS > PICOS18
Home

PICOS18 : RTOS pour µC PIC18

On entend trop souvent parler de noyau temps réel dans le monde de l'embarqué sans trop savoir pour autant de quoi il en retourne ! En fait pour comprendre ce qu'apporte un noyau multi-tâches temps-réel, il faut définir 3 aspects :

> Un noyau temps-réel ...

Un noyau...

C'est en fait un ensemble de fonctionnalités, regroupés sous le terme de SERVICES pour la plupart, qui forment le noyau. Dans le cas de Linux, par exemple, le noyau est constitué de la gestion des différents programmes, de l'accès au hardware, de la gestion des systèmes de fichiers... Le shell, quant à lui, est un programme, et n'est donc pas inclu dans le noyau. La fonction malloc, qui alloue dynamiquement de la mémoire à un programme, fait appel à un service du noyau, car c'est bel et bien le noyau qui est responsable de la gestion des ressources.
Une des fonctionnalié les plus connue des noyaux (sans être pour autant un service) est le SCHEDULER, responsable de la cohabitation des différents programmes pendant leur exécution.

... multi-tâches ...
C'est donc le noyau qui contrôle les ressources et permet leur utilisation de façon sûre et efficace au travers de SERVICES. Puisque le noyau garantit la stabilité du système, plusieurs programmes indépendants peuvent se tenir prêt à fonctionner, au bon vouloir du noyau. Cette MULTI-PROGRAMMATION permet aux développeurs de créer des programmes sans se soucier de savoir s'il existe d'autres programmes dans le système. Chacun à l'impression que le système lui est dédié.
Si le noyau le permet, il est même possible de faire fonctionner ces programmes en parallèle tout en donnant l'impression à chacun d'être seul à fonctionner (au prix d'une perte de vitesse bien entendu).
Lorsque le noyau joue parfaitement son rôle de chef d'orchestre (le fonctionnement en parallèle des tâches incombent au noyau seul) on dit que le noyau est MULTI-TACHES PREEMPTIF. Si le noyau n'est pas capable de faire une telle chose, alors c'est aux tâches de "rendre la main" au noyau de temps en temps. On dit que le noyau est MULTI-TACHES COOPERATIF.
... temps-réel.

Le noyau multi-tâche peut simplement gérer le parallélisme en découpant le temps en parts égales pour chaque tâche en mémoire. Le problème, c'est que les tâches en fonctionnement ont rarement les mêmes besoins, et certaines, rarement actives, requièrent toute la puissance du système lorsqu'elles se réveillent.
Les tâches ont donc des PRIORITES différentes, et doivent pouvoir répondre à un évènement dans un temps le plus court possible. Plutôt que d'assurer un temps de réactivité quasi-nul (ce qui est impossible), le noyau se doit de garantir un TEMPS DE LATENCE constant : c'est le DETERMINISME.

 

> ... pour PIC18

Avant l'arrivée des PIC18, il n'était pas possible de développer un tel noyau sur les PIC. En effet la caractéristique première d'un noyau multi-tâches est de faire cohabiter les tâches en parallèle, ce qui implique de contrôler la pile des appels de fonctions. Imaginez ce qui se passerait si toutes les tâches en fonctionnement partageaient la même pile : le noyau interromprait le fonctionnement d'une tâche pour activer une autre tâche, et à la prochaine instruction RETURN rencontrée, le retour se ferait dans la première tâche, au niveau du dernier appel de fonction !

Les PIC18 permettent la manipulation de la pile des appels de fonctions (instructions PUSH et POP ajoutée au jeu d'instructions, et déplacement du pointeur de pile) , si bien qu'il est désormais possible de mettre la pile dans un état correct avant l'activation de la prochaine tâche.

Il restait alors à définir la liste des services du noyau à développer et sa gestion interne des tâches et des ressources. Plutôt que de partir dans une solution propriétaire, j'ai choisi de me baser sur une norme. J'ai retenu la norme OSEK (www.osek-vdx.org), utilisée dans l'automobile, la robotique,... Cette norme définie le rôle du noyau autour de 3 axes : Operating System (OS), Communication (COM) et Network Management (NM). Pour l'instant seule la partie OS a été implémentée.

Le noyau PICOS18 est en open-source et est distribué sous licence GPL. Toute participation est la bien venue, et surtout n'hésitez pas à me faire part de vos projets mettant en oeuvre ce noyau temps-réel.

Téléchargez
les sources
Mailing list
Tutorial
Fonctionnement et
performances du noyau