| PICOS18 |
|
|
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. |
|
... 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. |
| > ... pour PIC18 |
| Avant l'arrivée des PIC18xxx, 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 PIC18xxx 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.
| > Documentation |
Voici une liste des documentations qui se rapportent à PICos et PICos18 (présentation, exemples, projets, ...) :
Présentation PICos séminaire Microchip France
Présentation PICos18 ESTGA Portugal