Vous êtes sur la page 1sur 55

Systmes

dExploitation
temps rel

FreeRTOS

1
www.freertos.org/

Gabriel FREY 2013 freyg.it@gmail.com


2
FreeRTOS

Plan de lintervention
1. Introduction aux Systmes Temps Rel

2. Programmation des STR

3. Ordonnancement

4. FreeRTOS
Prsentation
Architecture et API
Services fournis et domaines dapplication
Conclusion sur freeRTOS

Gabriel FREY 2013 freyg.it@gmail.com


3
FreeRTOS

Prsentation de FreeRTOS

Gabriel FREY 2013 freyg.it@gmail.com


4
FreeRTOS

Gnralits
FreeRTOS est un OS :

Cr en 2003, aujourdhui (Juin 2013) en version 7.3.0.


Gratuit et open source.
Dvelopp par Real Time Engineers Ltd.
Leader du march des STR (le plus utilis - enqute UBM
de 2011).

http://www.freertos.org/FreeRTOS-screen-casts/RTOS-screen-casts.html

Gabriel FREY 2013 freyg.it@gmail.com


5
FreeRTOS

Gnralits
FreeRTOS est un OS :

Minimaliste : empreinte de 4Ko 9Ko.


5 fichiers en langage C.
Utilis pour les systmes embarqus ayant de fortes
contraintes lies au matriel.
Utilis souvent comme socle pour le
dveloppement dAPI spcifiques et/ou
propritaires.

Gabriel FREY 2013 freyg.it@gmail.com


6
FreeRTOS

Gnralits
Autres licences :

OpenRTOS : version commerciale (avec support) qui


inclut les pilotes USB, le systme de fichier FAT et
une pile TCP/IP.

SafeRTOS : Destin aux systmes critiques.


Quasiment identique FreeRTOS mais limite les
erreurs ventuelles de lutilisateur.

Gabriel FREY 2013 freyg.it@gmail.com


7
FreeRTOS

Architecture et API

Gabriel FREY 2013 freyg.it@gmail.com


8
FreeRTOS

Les tches
Nombre illimit autoris tant que le hardware
peut les grer.

Gre les tches priodiques et apriodiques.

Gabriel FREY 2013 freyg.it@gmail.com


9
FreeRTOS

Les tches

Gabriel FREY 2013 freyg.it@gmail.com


10
FreeRTOS

Les tches
Cration / Suppression de tche :
xTaskCreate, vTaskDelete

Contrle de tche :
vTaskDelay, uxTaskPriorityGet, vTaskPrioritySet,
vTaskSuspend, vTaskResume

http://www.freertos.org/a00106.html

Gabriel FREY 2013 freyg.it@gmail.com


11
FreeRTOS

Les tches

portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
/* Pointeur vers la fonction */
const portCHAR * const pcName,
/* Nom de la tche */
unsigned portSHORT usStackDepth,
/* Taille de la pile pour la tche (en mots) */
void *pvParameters,
/* pointeurs vers les arguments donns la tche */
unsigned portBASE_TYPE uxPriority,
/* priorit (0 -> MAX-1) */
xTaskHandle *pvCreatedTask
/* Id pour grer la tche */
);

Gabriel FREY 2013 freyg.it@gmail.com


12
FreeRTOS

Les tches
/* Task to be created. */
void vTaskCode(void* pvParameters)
{
for(;;) {/* Task code goes here. */}
}

/* Function that creates a task. */


void vOtherFunction(void)
{
static unsigned char ucParameterToPass;
xTaskHandle xHandle;
xTaskCreate(vTaskCode, "NAME", STACK_SIZE,
&ucParameterToPass, tskIDLE_PRIORITY, &xHandle);
/* Use the handle to delete the task. */
vTaskDelete(xHandle);
}

Gabriel FREY 2013 freyg.it@gmail.com


13
FreeRTOS

Lordonnanceur
Dcide quelle tche excuter parmi celles qui sont
dans ltat READY, en se basant uniquement sur la
priorit des tches.

Nombre depriorits illimit dfini par la variable


tskMAX_PRIORITIES, dans FreeRTOSConfig.h.

La priorit est statique, seul le dveloppeur peut


la modifier : vTaskPrioritySet.

Gabriel FREY 2013 freyg.it@gmail.com


14
FreeRTOS

Lordonnanceur
Tches de mme priorit : Round Robin.

Ordonnancement est premptif mais peut tre sur


demande du dveloppeur :
Coopratif (pas de premption sauf sur Yield() =
explicite) : simplifie la gestion des tches mais moins
fiable et moins efficace.
Hybride (premption explicite ou sur interruption).

Gabriel FREY 2013 freyg.it@gmail.com


15
FreeRTOS

Lordonnanceur
La famine (starvation) :
Si une tche de priorit maximale ne sarrte jamais,
les autres tches ne prendront jamais la main. Et
FreeRTOS nimplmente aucuns mcanismes pour
empcher cela.

Pour empcher cela, le dveloppeur peut :


Sassurer lui mme de ne pas tomber dans une
situation de famine (interruptions).
Utiliser RMS.

Gabriel FREY 2013 freyg.it@gmail.com


16
FreeRTOS

Lordonnanceur
La tche Idle :
Un microcontrleur doit toujours avoir quelque
chose excuter. FreeRTOS cr une tche Idle au
lancement de lordonnanceur, de priorit minimale.
La tche Idle des fonctions de support, comme la
libration de lespace occup par des tches
supprimes, la mesure du taux dutilisation du
processeur, la mise en veille du microcontrleur
lorsquaucune tche applicative nest en excution,

Gabriel FREY 2013 freyg.it@gmail.com


17
FreeRTOS

Les listes
Outils systme interne.

Structure de donnes la plus utilise dans


FreeRTOS :
Pour ordonnancer les tches.
Pour implmenter les files.

Plusieurs structures pour dcrire les listes.

Gabriel FREY 2013 freyg.it@gmail.com


18
FreeRTOS

Les listes
xLIST : reprsente lentte des listes cres et
utilises par lordonnanceur.

typedef struct xLIST


{
volatile unsigned portBASE_TYPE uxNumberOfItems;
/* Le nombre d'lments dans cette liste. */
volatile xListItem * pxIndex;
/* Pointeur utilis pour parcourir cette liste. */
volatile xMiniListItem xListEnd;
/* lment marquant la fin de cette liste. */
} xList;

Gabriel FREY 2013 freyg.it@gmail.com


19
FreeRTOS

Les listes
xLIST_ITEM : reprsenteles lments dune liste.
Liste doublement chaine.
Typedef struct xLIST_ITEM
{
portTickType xItemValue;
/* Une valeur attribue cet lment. */
volatile struct xLIST_ITEM * pxNext;
/* Pointeur vers le prochain lment. */
volatile struct xLIST_ITEM * pxPrevious;
/* Pointeur vers le prcdent lment. */
void * pvOwner;
/* Pointeur vers l'objet contenant cet lment. */
void * pvContainer;
/* Pointeur vers la liste qui contient llment. */
} xListItem;
Gabriel FREY 2013 freyg.it@gmail.com
20
FreeRTOS

Les listes

xMINI_LIST_ITEM : version rduite de xLIST_ITEM.


Elle le possde pas les lments pvOwner et
pvContainer. Elle reprsente un lment
marquant la fin de cette liste.

Gabriel FREY 2013 freyg.it@gmail.com


21
FreeRTOS

Les listes

Gabriel FREY 2013 freyg.it@gmail.com


22
FreeRTOS

Les files
Principal mcanisme permettant de faire
communiquer et synchroniser des tches entre-
elles.
Invitable pour construire une application complexe
o les tches cooprent.
Stockent un nombre fini dlments de tailles fixes.
Indpendant des tches : peuvent tre lues et
crites par diffrentes tches.
Lcriture et la lecture sont ralises octet par octet.

Gabriel FREY 2013 freyg.it@gmail.com


23
FreeRTOS

Les files
typedef struct QueueDefinition
{
signed char *pcHead; /* ptr octet de dbut. */
signed char *pcTail; /* ptr octet de fin. */
signed char *pcWriteTo; /* ptr prochain octet libre. */
signed char *pcReadFrom;
/* Pointeur sur le dernier octet lu de la file. */
xList xTasksWaitingToSend;
/* Liste des tches bloques en attente dcriture. */
xList xTasksWaitingToReceive;
/* Liste des tches bloques en attente de lecture. */
volatile unsigned portBASE_TYPE uxMessagesWaiting;
/* Nombre d'lments contenus dans la file. */
unsigned portBASE_TYPE uxLength;
/* Taille de la file. */
unsigned portBASE_TYPE uxItemSize;
/* Taille de chaque lment (en octet). */
} xQUEUE;
Gabriel FREY 2013 freyg.it@gmail.com
24
FreeRTOS

Les files
Lecture : si plusieurs tches veulent lire dans une
file, celle de plus haute priorit est choisie. Si
plusieurs tches ont la mme priorit, la premire
a avoir demand est slectionne. Aprs avoir lu
un lment, il est normalement supprim
(xQueuePeek).
portBASE_TYPE xQueueReceive(
xQueueHandle xQueue,
/* Identifiant de la file. */
const void * pvBuffer,
/* Pointeur vers un buffer o la donne sera copie. */
portTickType xTicksToWait
/* Valeur de timeout. */
);
Gabriel FREY 2013 freyg.it@gmail.com
25
FreeRTOS

Les files
Ecriture : mmes rgles que pour la lecture.
/* FIFO Mode */
portBASE_TYPE xQueueSend(
xQueueHandle xQueue,
/* Identifiant de la file. */
const void * pvItemToQueue,
/* Pointeur vers llment copier */
portTickType xTicksToWait
/* Valeur de timeout. */
);
portBASE_TYPE xQueueSendToBack(xQueueHandle xQueue,
const void * pvItemToQueue, portTickType xTicksToWait);

/* LIFO Mode */
portBASE_TYPE xQueueSendToFront(xQueueHandle xQueue,
const void * pvItemToQueue, portTickType xTicksToWait);
Gabriel FREY 2013 freyg.it@gmail.com
26
FreeRTOS

Les files
Cration de file.

xQueueHandle xQueueCreate(
unsigned portBASE_TYPE uxQueueLength,
/* Nombre dlments. */
unsigned portBASE_TYPE uxItemSize
/* Taille dun lment. */
);

Gabriel FREY 2013 freyg.it@gmail.com


27
FreeRTOS

Gabriel FREY 2013 freyg.it@gmail.com


28
FreeRTOS

Gabriel FREY 2013 freyg.it@gmail.com


29
FreeRTOS

Les smaphores et les mutex

FreeRTOS synchronise les tches en utilisant


principalement ces deux mcanismes.

Deux types de smaphores : les smaphores


binaires et les smaphores compteurs.

Gabriel FREY 2013 freyg.it@gmail.com


30
FreeRTOS

Smaphores binaires
Manire la plus simple et efficace
de synchroniser
des tches. Peut tre vu comme une file 1
lment.

Cration dun smaphore binaire :

void vSemaphoreCreateBinary(xSemaphoreHandle xSemaphore);

Gabriel FREY 2013 freyg.it@gmail.com


31
FreeRTOS

Smaphores binaires
Prendre P() :
portBASE_TYPE xSemaphoreTake(
xSemaphoreHandle xSemaphore,
portTickType xTicksToWait
);

Librer V() :
portBASE_TYPE xSemaphoreGive(
xSemaphoreHandle xSemaphore
);

portBASE_TYPE xGiveSemaphoreFromISR(xSemaphoreHandle xSemaphore);


Gabriel FREY 2013 freyg.it@gmail.com
32
FreeRTOS

Mutex
Permet dviter lexclusion mutuelle. La libration
dun mutex doit tre faite par la tche qui la pris.

Cration dun mutex :

xSemaphoreHandle xSemaphoreCreateMutex(void)

Mcanisme dhritage de priorit. Permet dviter


linversion de priorit.

Gabriel FREY 2013 freyg.it@gmail.com


33
FreeRTOS

Smaphore compteur
Un smaphore compteur peut tre pris plusieurs
fois avant de devenir indisponible.

Cration dun smaphore compteur :


xSemaphoreHandle xSemaphoreCreateCounting(
unsigned portBASE_TYPE uxMaxCount,
/* Capacit du smaphore compteur. */
unsigned portBASE_TYPE uxInitialCount
/* Valeur du compteur aprs cration. */
);

Gabriel FREY 2013 freyg.it@gmail.com


34
FreeRTOS

Gestion des interruptions


Mcanisme purement matriel.

FreeRTOS ne fait que fournir des mthodes


spcifiques permettant la gestion des
interruptions et peut galement en lancer par
appel une instruction matrielle.

Les routines dinterruption (ISR) sont des


fonctions excutes par le microprocesseur lui
mme et qui ne peuvent pas tre gres par
FreeRTOS.
Gabriel FREY 2013 freyg.it@gmail.com
35
FreeRTOS

Gestion des interruptions


FreeRTOS nimpose pas de stratgie spcifique
pour la gestion des interruptions, cest donc au
dveloppeur de construire sa stratgie laide de
deux constantes de FreeRTOSConfig.h :
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
Permet de dfinir une politique de gestion des ISR
selon leur niveau de priorit.

Gabriel FREY 2013 freyg.it@gmail.com


36
FreeRTOS

Interruptions diffres
Trs important pour le temps rel !

amne
ISR = routine excute par le processeur
a des comportements inattendus du noyau.

Il est donc ncessaire de rduire au maximum le


temps dexcution dune ISR. On utilise les
smaphores binaires offerts par FreeRTOS pour
diffrer le processus dinterruption vers une
simple tche.

Gabriel FREY 2013 freyg.it@gmail.com


37
FreeRTOS

Interruptions diffres

Gabriel FREY 2013 freyg.it@gmail.com


38
FreeRTOS

Sections critiques
Les sections critiques sont des portions de code
qui ont besoin dtre protges de tout
changement de contexte pour viter dventuelles
corruptions.

Au cours de lexcution de la portion de code


place entre les fonctions taskENTER_CRITICAL()
et taskEXIT_CRITICAL(), les interruptions et
lordonnanceur sont dsactivs.

Gabriel FREY 2013 freyg.it@gmail.com


39
FreeRTOS

Sections critiques
Les sections critiques sont utiliser avec
prcaution car pendant leur excution, le systme
reste statique et totalement inactif envers
d'autres tches (critiques) qui seraient bloques
ou envers des interruptions signalant des
vnements extrieurs critiques.

Gabriel FREY 2013 freyg.it@gmail.com


40
FreeRTOS

Sections critiques
Il existe une mthode un peu moins violente pour
utiliser les sections critiques. Cette mthode
stoppe lordonnanceur et empche donc le code
dtre prempt, mais conserve le mcanisme
dinterruption actif.

vTaskSuspendAll();
{
/* Code en section critique */
}
xTaskResumeAll();

Gabriel FREY 2013 freyg.it@gmail.com


41
FreeRTOS

Gestion de la mmoire
Le noyau de FreeRTOS doit allouer
dynamiquement de la mmoire chaque fois
quune tche, une file ou un smaphore est cr.
Lutilisation des classiques malloc et free est
toujours possible mais non dterministe dans le
cas dune mmoire fragmente.

2 mthodes pvPortMalloc() et vPortFree() existent


et sont implmentes de 3 manires diffrentes
dans Heap_1.c, Heap_2.c et Heap_3.c.

Gabriel FREY 2013 freyg.it@gmail.com


42
FreeRTOS

Gestion de la mmoire

void *pvPortMalloc(size_t xWantedSize);


void pvPortFree(void *pv);

La constante configTOTAL_HEAP_SIZE, dans le


fichier FreeRTOSConfig.h dfinit la quantit de
mmoire disponible.

Gabriel FREY 2013 freyg.it@gmail.com


43
FreeRTOS

Gestion de la mmoire
1reimplmentation : dans un petit systme
embarqu, il est possible dallouer tous les
objets/tches et de ne jamais avoir besoin de
rallouer ou de dsallouer. Ce cas extrmement
simple rend inutile la fonction pvPortFree. Seule la
fonction pvPortMalloc est implmente.

Gabriel FREY 2013 freyg.it@gmail.com


44
FreeRTOS

Gestion de la mmoire

Gabriel FREY 2013 freyg.it@gmail.com


45
FreeRTOS

Gestion de la mmoire
2me implmentation : elle se diffrencie de la
premire car elle implmente la mthode
pvPortFree. Ce nest pas totalement libre pour
autant, il faut que la taille du nouveau bloc ne soit
pas suprieure celle du bloc dsallou. Il faut
donc que dans le cycle de vie de la tche, le
nombre de variables et leurs tailles restent
constant.
Si les allocations ne sont pas rgulires, cette
implmentation est gnratrice de fragmentation.

Gabriel FREY 2013 freyg.it@gmail.com


46
FreeRTOS

Gestion de la mmoire

Gabriel FREY 2013 freyg.it@gmail.com


47
FreeRTOS

Gestion de la mmoire
3me implmentation : redfinition de malloc et de
free o la scurit a t augmente : toutes les
tches sont suspendues pendant la dure de
lopration mmoire.

Gabriel FREY 2013 freyg.it@gmail.com


48
FreeRTOS

Gestion de la mmoire
Attention : trs grande rigueur de programmation
est exige quant une bonne gestion de la
mmoire !!

Gabriel FREY 2013 freyg.it@gmail.com


49
FreeRTOS

Services fournis et domaines


dapplication

Gabriel FREY 2013 freyg.it@gmail.com


50
FreeRTOS

Utilisation
STR pour les petits systmes embarqus.

Implment sur des priphriques mobiles et


souvent utilis sur les processeurs ARM.

Sert souvent de socle pour le dveloppement


dAPI spcifiques : utilis dans des domaines trs
varis o la contrainte temps rel est forte.

Gabriel FREY 2013 freyg.it@gmail.com


51
FreeRTOS

Utilisation
Souvent utilis comme base de dveloppement pour
une stack IP.

Autre grand domaine dutilisation : les capteurs sans fil


(domaine mdical pour surveiller les patients).

Petit systme dexploitation : permet dassurer une


faible consommation lectrique = indispensable pour
les petits systmes embarqus.

Gabriel FREY 2013 freyg.it@gmail.com


52
FreeRTOS

Utilisation
Licence GPL : code source ouvert. Privilgi dans
les domaines de la recherche et de
lenseignement. Concurrent propritaire QNX
favoris dans le milieu industriel.

Intressant pour tudierl'implmentation


d'ordonnanceur et la gestion de tches.

Domaine automobile : utilise des frameworks


base de freeRTOS.

Gabriel FREY 2013 freyg.it@gmail.com


53
FreeRTOS

Conclusion sur freeRTOS

Gabriel FREY 2013 freyg.it@gmail.com


54
FreeRTOS

Conclusion
Adapt pour les petits systmes embarqus.

Empreinte mmoire trs petite mais


fonctionnalits limites :
Pas de support de thread
Gestion de la mmoire minimaliste
Aucuns drivers pour communication externe
Pas de stack IP
Rien pour grer les systmes de fichier

Gabriel FREY 2013 freyg.it@gmail.com


55
FreeRTOS

Conclusion
Mais les fonctions basiques dun OS sont
implmentes, cest donc suffisant pour des petits
designs et mme pour quelques applications plus
complexes.

Gabriel FREY 2013 freyg.it@gmail.com

Vous aimerez peut-être aussi