Vous êtes sur la page 1sur 9

Introduction – µC/OS-II

— 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

Systèmes en temps réel Cours #8 1

µC/OS-II – Types globaux

— Définition de types globaux -- Fichier OS_CPU.H


typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /* Unsigned 8 bit quantity */
typedef signed char INT8S; /* Signed 8 bit quantity */
typedef unsigned int INT16U; /* Unsigned 16 bit quantity */
typedef signed int INT16S; /* Signed 16 bit quantity */
typedef unsigned long INT32U; /* Unsigned 32 bit quantity */
typedef signed long INT32S; /* Signed 32 bit quantity */
typedef float FP32; /* Single precision floating point */
typedef double FP64; /* Double precision floating point */

typedef unsigned int OS_STK; /* Each stack entry is 16-bit wide */

#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

Systèmes en temps réel Cours #8 2

1
Structure – Fichiers C et ASM

Systèmes en temps réel Cours #8 3

Compilation d’un
projet µC/OS-II

—Inclure tous les


fichiers nécessaires
dans le projet
—Ne pas oublier
d’inclure
OS_CPU_A.OBJ
dans votre projet
(Vous en trouverez une
copie dans les
exemples)

Systèmes en temps réel Cours #8 4

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

µC/OS-II – Groupe de fonctions

Interruptions
OS_ENTER_CRITICAL() Æ Macro dans OS_CPU.h
OS_EXIT_CRITICAL()
void OSIntEnter(void)
void OSIntExit(void)

Code provenant de OS_CPU.h


#define OS_CRITICAL_METHOD 2
#if OS_CRITICAL_METHOD == 1
#define OS_ENTER_CRITICAL() asm CLI /* Disable interrupts */
#define OS_EXIT_CRITICAL() asm STI /* Enable interrupts */
#endif

#if OS_CRITICAL_METHOD == 2
#define OS_ENTER_CRITICAL() asm {PUSHF; CLI} /* Disable interrupts */
#define OS_EXIT_CRITICAL() asm POPF /* Enable interrupts */
#endif

Systèmes en temps réel Cours #8 6

3
µC/OS-II – Groupe de fonctions

Séquenceur
void OSSchedLock(void)
void OSSchedUnlock(void)

(ou service de gestion du temps Æ OS_TIME.c)


void OSTimeDly(WORD16) ;
void OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U
seconds, INT8U milli)
INT8U OSTimeDlyResume(INT8U prio)

Systèmes en temps réel Cours #8 7

µC/OS-II – Groupe de fonctions

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()

Systèmes en temps réel Cours #8 8

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

Systèmes en temps réel Cours #8 9

µC/OS-II – Services auxiliaires

— Voir (Blocks/source/PC.C et PC.h)


—Affichage en mode caractère
• void PC_DispClrScr (INT8U color)
˜ Nettoie l’écran
• void PC_DispClrLine (INT8U y, INT8U color)
˜ Nettoie la ligne y
• void PC_DispChar (INT8U x, INT8U y, INT8U c, INT8U color)
˜ Affiche un caratère
• void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color)
˜ Affiche une chaîne de caractères
—Dans votre laboratoire, vous pouvez utiliser ces
fonctions ou celles de la librairie TGraph

Systèmes en temps réel Cours #8 10

5
µC/OS-II – Services auxiliaires

— Fonctions permettant de revenir à DOS correctement


• void PC_DOSSaveReturn (void)
˜ Sauvegarde l’état de DOS
• void PC_DOSReturn (void)
˜ Retourne le contrôle à DOS
— Fonctions pour mesurer les intervalles de temps (en µs)
• void PC_ElapsedInit(void)
• void PC_ElapsedStart(void)
• INT16U PC_ElapsedStop(void)
— Fonction pour obtenir la date et le temps (résolution en s)
• void PC_GetDateTime (char *s)

Systèmes en temps réel Cours #8 11

µC/OS-II – Services auxiliaires

—Fonction pour lire le clavier (vrai, s’il y a un


caractère)
• BOOLEAN PC_GetKey (INT16S *c)
—Fonction pour configurer les interruptions du
circuit de minuterie (8254)
• void PC_SetTickRate (INT16U freq)
—Fonctions pour les ISRs
• void *PC_VectGet (INT8U vect)
• void PC_VectSet (INT8U vect, void (*isr)(void))
Æ Utiliser les fonctions setvect et getvect directement

Systèmes en temps réel Cours #8 12

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 */
}

Systèmes en temps réel Cours #8 13

Structure d’un projet µC/OS-II

—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) ? »
}
}

Systèmes en temps réel Cours #8 14

7
Étude d’un exemple – EX1L

—Contient treize (13) tâches :


• Deux (2) tâches système et onze (11) tâches de l’usager
• Première tâche (TaskStart) crée les dix (10) autres et
affiche :
˜Nombre de changement de contexte
˜Utilisation du CPU
˜La date et le temps
˜La version du noyau µC/OS-II
Code EX1L Code Code OS_CFG
INCLUDES

Systèmes en temps réel Cours #8 15

Rappel : Structure de votre laboratoire

Æ Réception des échantillons par interruption


— Un minimum cinq (5) tâches est exigé :
• Affichage temporel (aussi rapidement que possible après
l’arrivée des échantillons…)
• Deux (2) tâches pour le calcul et l’affichage de chaque
FFT
• Interface usager
• Gizmo (horloge, alarmes, …)
— Coder de façon modulaire :
• Permettra d’optimiser l’exécution de chaque module

Systèmes en temps réel Cours #8 16

8
Sources d’information

—Livre de références : Réserve de la bibliothèque


—Manuel de références -- uC/OS : quickref.htm
—Document : Compilation_uCOS-II
—Site : www.ucos-ii.com

Systèmes en temps réel Cours #8 17

Vous aimerez peut-être aussi