Portage de µC/OS II

publicité
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.
Téléchargement