Académique Documents
Professionnel Documents
Culture Documents
Propriétés fondamentales
• Noyau en temps réel simple et petit (~ 4 000 lignes)
• Focus sur la gestion des tâches (pas de E/S, GUI, système de
fichiers)
• Portable – Codé en C avec seulement quelques fonctions en
assembleur
• « scalable » : On peut utiliser seulement les fonctionnalités dont on
a besoin
• Système multitâche : 64 tâches maximum – 56 disponibles aux
usagers
• Système préemptif : Ordonnancement basé sur priorité
• Exécution déterministe : On peut prédire/mesurer le temps
d’exécution des fonctions du noyau Æ Ceci veut dire que le
cheminement (algorithme) est fixe; il est toujours difficile de
prédire précisément le temps d’exécution
#define BYTE INT8S /* Define data types for backward compatibility ... */
#define UBYTE INT8U /* ... to uC/OS V1.xx. Not actually needed for ... */
#define WORD INT16S /* ... uC/OS-II. */
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
1
Structure – Fichiers C et ASM
Compilation d’un
projet µC/OS-II
2
µC/OS-II – Groupe de fonctions
Initialisation
void OSInit(void) et void OSStart(void)
Tâches
BYTE8 OSTaskCreate(void (*fn)(void *),
void *data, void *stk, BYTE8 prio)
BYTE8 OSTaskCreateExt(…) Æ Même chose avec plus d’options
BYTE8 OSTaskDel(BYTE8 prio)
BYTE8 OSTakDelReq(BYTE8 prio)
BYTE8 OSTaskChangePrio(BYTE8 old, BYTE8 new)
BYTE8 OSTaskQuery(BYTE8 prio, OS_TCB *pdata)
BYTE8 OSTaskSuspend(BYTE8 prio)
BYTE8 OSTaskResume(BYTE8 prio)
Systèmes en temps réel Cours #8 5
Interruptions
OS_ENTER_CRITICAL() Æ Macro dans OS_CPU.h
OS_EXIT_CRITICAL()
void OSIntEnter(void)
void OSIntExit(void)
#if OS_CRITICAL_METHOD == 2
#define OS_ENTER_CRITICAL() asm {PUSHF; CLI} /* Disable interrupts */
#define OS_EXIT_CRITICAL() asm POPF /* Enable interrupts */
#endif
3
µC/OS-II – Groupe de fonctions
Séquenceur
void OSSchedLock(void)
void OSSchedUnlock(void)
Communication intertâches
Boîte à courrier Sémaphores
OSMboxAccept() OSSemAccept()
OSMboxCreate() OSSemCreate()
OSMboxPend() OSSemPend()
OSMboxPost() OSSemPost()
OSMboxQuery() OSSemQuery()
Queues
OSQAccept() OSQPend()
OSQCreate() OSQPost()
OSQFlush() OSQPostFront()
OSQQuery()
4
µC/OS-II – Groupe de fonctions
Gestion du temps
INT32U OSTimeGet(void) Æ Service de temps en « Tick »
void OSTimeSet(INT32U ticks) (Compteur 32 bits)
void OSTimeTick(void)
Gestion de la mémoire
OSMemCreate() Æ Création d’une partition
OSMemGet() (blocks égaux de mémoire
OSMemPut() pré-alloués)
OSMemQuery()
Autres OSStatInit() Æ Initialisation des statistiques
OSTaskStkChk() Æ Initialisation des statistiques sur la pile
OSVersion() Æ Donne la version
5
µC/OS-II – Services auxiliaires
6
Structure d’un projet µC/OS-II
Configuration
• #include "includes.h” Æ Fichier d’entête principal
#include "os_cfg.h“ Æ Configuration du noyau
Programme principal
Main ()
{
OSInit (); /* Initialisation de µC/OS-II */
Création d’au moins une tâche Æ OSTaskCreate()
OSStart(); */ Début exécution multi-tâches */
}
Votre tâche
void UneTache (void *pdata)
{
Éléments
for (;;) optionnels
{
« synchronisation ?» Ex : OSSemPend(), OSQPend()
« Faire quelque chose »
« synchronisation ? » Ex: OSSemPost()
« OSTaskDel(OS_PRIO_SELF) ? »
}
}
7
Étude d’un exemple – EX1L
8
Sources d’information