GEI 437 Laboratoire d ’interfaces et microprocesseurs Portage de µC/OS II Description du processus de portage du noyau µC/OS II sur un microprocesseur 2 avril, 2001 Philippe Mabilleau Ing. 2 GEI 437 Laboratoire d ’interfaces et microprocesseurs Processus de portage • Mettre en œuvre µC/OS II sur un nouveau processeur – processeur nouvellement développé – processeur pour lequel cela n ’a pas déjà été fait • Conditions à réaliser – sur le processeur et son architecture – sur les outils de développement • Réalisation du portage Philippe Mabilleau Ing. 3 GEI 437 Laboratoire d ’interfaces et microprocesseurs Conditions requises • • • • Compilateur C Interruptions Taille de la pile Sauvegarde des registres Philippe Mabilleau Ing. 4 GEI 437 Laboratoire d ’interfaces et microprocesseurs Compilateur C • Compilateur C pour le processeur cible • Code généré réentrant – les fonctions peuvent être appelées à nouveau lorsqu’elles sont déjà actives – dépendant de l ’architecture du processeur – en général associé à la présence d ’une pile capable de contenir les variables locales • Lien possible avec le code en assembleur Philippe Mabilleau Ing. 5 GEI 437 Laboratoire d ’interfaces et microprocesseurs Interruptions • Doivent pouvoir être masquées – instructions spécifiques – manipulation de drapeaux • Interruption périodique requise – rythme de 10 à 100 Hz typiquement – PIT ou « Timer » pouvant être réarmé Philippe Mabilleau Ing. 6 GEI 437 Laboratoire d ’interfaces et microprocesseurs Pile de taille suffisante • Pile capable d ’entreposer des structures de taille importante – quelque Koctets – donc portage impossible avec les processeurs où la pile est limitée à 16 ou 32 mots, même 256 • Possibilité de définir des piles différentes pour les tâches – pas de pile « hardware » Philippe Mabilleau Ing. 7 GEI 437 Laboratoire d ’interfaces et microprocesseurs Sauvegarde des registres • Tous les registres doivent pouvoir être copiés en mémoire pour sauvegarde (et restitution) – tous les registres de travail utilisés par les programmes C – dans la mémoire ou dans la pile • Le pointeur de pile doit également pouvoir être sauvegardé et restitué depuis la mémoire Philippe Mabilleau Ing. 8 GEI 437 Laboratoire d ’interfaces et microprocesseurs Processus de portage • Déclarations et code à modifier ou écrire • Construction du noyau et tests • De 50 à 300 lignes de code • Quelques heures à une semaine de travail Philippe Mabilleau Ing. 9 GEI 437 Laboratoire d ’interfaces et microprocesseurs Fichiers à modifier • OS_CPU.H – types à définir – macros à définir • OS_CPU_C.C – fonctions à définir (1) • OS_CPU_A.ASM – fonctions à définir (4) Philippe Mabilleau Ing. 10 GEI 437 Laboratoire d ’interfaces et microprocesseurs Types de données • Déclarés dans le fichier OS_CPU.H – données sur 8, 16 et 32 bits signées et non-signées – pour éviter l ’ambiguïté des types short, int et long selon les processeurs et les compilateurs – type des éléments de la pile Philippe Mabilleau Ing. 11 GEI 437 Laboratoire d ’interfaces et microprocesseurs Masquage des interruptions • Macros OS_ENTER_CRITICAL() et OS_EXIT_CRITICAL() • 3 méthodes – instructions de masquage / autorisation des interruptions – empilement de l ’état du masque – sauvegarde de l ’état du masque dans une variable locale Philippe Mabilleau Ing. 12 GEI 437 Laboratoire d ’interfaces et microprocesseurs Autres déclarations • Direction de croissance de la pile – OS_STK_GROWTH • = 0 vers les adresses croissantes • = 1 vers les adresses décroissantes • Macro OS_TASK_SW() – changement de contexte appelé au niveau tâche – interruption logicielle Philippe Mabilleau Ing. 13 GEI 437 Laboratoire d ’interfaces et microprocesseurs Fonctions assembleur • OSStartHighRdy() – démarre la tâche la plus prioritaire par restitution de son environnement • OSCtxSw() et OSIntCtxSw() – réalise le changement de contexte en interruption logicielle (Macro OS_TASK_SW()) et dans un ISR • OSTickIsr() – fonction de service de l ’interruption périodique Philippe Mabilleau Ing. 14 GEI 437 Laboratoire d ’interfaces et microprocesseurs Fonctions C • OSTaskStkInit() – fonction de création d ’une pile avec un environnement initial pour une tâche • Fonctions d ’interception d ’événements dans µC/OS II – TaskCreate, TaskDel, TaskSw, TaskStat et TimeTick Philippe Mabilleau Ing.