0% ont trouvé ce document utile (0 vote)
4 vues42 pages

Super Loop vs RTOS : Guide FreeRTOS

Le document compare le Super Loop et FreeRTOS, en détaillant les caractéristiques de FreeRTOS, notamment sa distribution, la gestion des tâches, et l'ordonnancement. FreeRTOS est conçu pour des applications temps réel embarquées, permettant de gérer plusieurs tâches avec des priorités différentes. Il aborde également des concepts comme les files, les sémaphores et les algorithmes d'ordonnancement, avec des exemples d'implémentation.

Transféré par

khadijaizmaoune85
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues42 pages

Super Loop vs RTOS : Guide FreeRTOS

Le document compare le Super Loop et FreeRTOS, en détaillant les caractéristiques de FreeRTOS, notamment sa distribution, la gestion des tâches, et l'ordonnancement. FreeRTOS est conçu pour des applications temps réel embarquées, permettant de gérer plusieurs tâches avec des priorités différentes. Il aborde également des concepts comme les files, les sémaphores et les algorithmes d'ordonnancement, avec des exemples d'implémentation.

Transféré par

khadijaizmaoune85
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

RTOS

11/12/2025 1

Super Loop vs RTOS


Super Loop

11/12/2025 2

1
Super Loop vs RTOS
Super Loop

11/12/2025 3

Super Loop vs RTOS


RTOS

11/12/2025 4

2
Super Loop vs RTOS
Super Loop

11/12/2025 5

11/12/2025 6

3
FreeRTOS
Plan :

1. Préambule (FreeRTOS Distrbution)


2. Introduction
3. Gestion de taches
4. Ordonnanceur
5. Gestion de la FILE (Queue)
6. Sémaphores

11/12/2025 7

FreeRTOS
Understanding the FreeRTOS Distribution :
• FreeRTOS Port: FreeRTOS peut être construit avec environ vingt compilateurs différents et peut
fonctionner sur plus de trente architectures de processeur différentes. Chaque combinaison de
compilateur et de processeur prise en charge est considérée comme un port FreeRTOS distinct.

• FreeRTOSConfig.h: FreeRTOS est configuré par un fichier d'en-tête appelé FreeRTOSConfig.h.


FreeRTOSConfig.h est utilisé pour personnaliser FreeRTOS pour une utilisation dans une application
spécifique.

• Une application de démonstration (Demo) est fournie pour chaque port FreeRTOS, et chaque
application demo contient un fichier FreeRTOSConfig.h. Il n'est donc jamais nécessaire de créer un
fichier FreeRTOSConfig.h à partir de rien. Au lieu de cela, il est recommandé de commencer par, puis
d'adapter, le fichier FreeRTOSConfig.h utilisé par l'application de démonstration fournie pour le port
FreeRTOS utilisé.

11/12/2025 8

4
FreeRTOS
Understanding the FreeRTOS Distribution :
The Official FreeRTOS Distribution: FreeRTOS est distribué dans un seul fichier zip. Le fichier zip contient
le code source pour tous les ports FreeRTOS et les fichiers de projet pour toutes les applications de
démonstration FreeRTOS.

• Les répertoires de premier et deuxième niveau de la distribution FreeRTOS sont illustrés et décrits
dans la figure:

11/12/2025 9

FreeRTOS
Understanding the FreeRTOS Distribution :
FreeRTOS Source Files Common to All Ports:

11/12/2025 10

5
FreeRTOS
Understanding the FreeRTOS Distribution :
FreeRTOS Source Files Specific to a Port

11/12/2025 11

FreeRTOS
Understanding the FreeRTOS Distribution :
Include Paths : FreeRTOS nécessite que trois répertoires soient inclus dans le chemin d'inclusion du compilateur. Ceux-
ci sont:

1. Le chemin d'accès aux principaux fichiers d'en-tête FreeRTOS, qui est toujours FreeRTOS/Source/include.

2. Chemin d'accès aux fichiers source spécifiques au port FreeRTOS utilisé. Comme décrit ci-dessus, il s'agit de
FreeRTOS/Source/portable/[compiler]/[architecture].

3. A path to the FreeRTOSConfig.h header file.

11/12/2025 12

6
FreeRTOS
Understanding the FreeRTOS Distribution :
Header Files :
Un fichier source qui utilise l'API FreeRTOS doit inclure "FreeRTOS.h", suivi du fichier d'en-tête contenant le prototype
de la fonction API utilisée : soit "task.h", "queue.h", "semphr.h". , 'timers.h' ou 'event_groups.h'.

Exemple d’une application ARM Cortex M3


Les fichiers sources se trouve dans le chemin:

Compilateur
Architecture

11/12/2025 13

FreeRTOS
Définitions

• FreeRTOS est dédié pour les applications temps réel embarquées qui utilisent des
microcontrôleurs ou des petits microprocesseurs. Ces applications généralement incluent le
temps réel stricte (Hard) et temps réel doux (Soft).

• Soft Real Time: le non respect de l’exigence du temps (time deadline) ne rend pas le système
inutilisable.
• Hard real time: Le non respect de l’exigence du temps (time deadline) est une défaillance
absolue dans le système.

11/12/2025 14

7
FreeRTOS
Définitions

• FreeRTOS est un noyau (kernel) temps réel (ou scheduleur) dans lequel des applications
temps réel stricte (Hard real time) peuvent être implémentées
• Il permet d’organiser les applications sous forme de collection de plusieurs taches (ou thread)
indépendantes.
• Le Noyau décide quelle tache doit être exécutée en examinant les priorités affectées a
chaque tache par le programmeur de l’application.
• Dans le cas simple: le programmeur de l’application peut affecter des priorités hautes pour
les taches de temps réel stricte (Hard) et des faibles priorités pour les taches du temps réel
doux (Soft)

11/12/2025 15

FreeRTOS
Task Functions

• Une tache est implémentée comme des fonctions C avec une valeur de
retour de type void; et prend comme paramètre un pointeur sur void:

11/12/2025 16

8
FreeRTOS
Task Scheleton

11/12/2025 17

FreeRTOS
Creating Tasks

11/12/2025 18

9
FreeRTOS
Creating Tasks
• pvTaskCode : ce paramètre est un simple pointeur vers la fonction qui implémente la tâche (en effet,
tout simplement le nom de la fonction).

• pcName: Un nom descriptif de la tâche. N’est pas utilisé par FreeRTOS. Il est inclu juste pour aider en
débogage.

• usStackDepth: Chaque tâche a son unique pile (Stack) qui lui a été allouée par le noyau lors de sa
création. La valeur de usStackDepth informe le noyau sur la largeur de la pile à allouer.

• pvParameters: les fonctions de tâche accepte un paramètre de type pointeur sur void (void*).

11/12/2025 19

FreeRTOS
Creating Tasks
• uxPriority : Définie la priorité avec laquelle la tâche doit exécutée. Les priorités assignées de 0 (la
priorite faible) à la priorité la plus haute.

• pxCreatedTask: utilise comme handle de la tâche créée. Ce handle sert donc à réferencier la tâche
dans l’API d’appel, par exemple, changer la priorité de la tâche ou supprimer la tâche. C’est
l’application n’utilise pas ce handle, alors pxCreatedTask prend la valeur NULL.

• Deux valeurs de retour possibles: pdPASS ou pdFAIL. Fail indique que la tâche n’est pas créée à cause
de l’insuffisance de mémoire de tas ( Heap) disponible pour FreeRTOS pour allouer de la RAM pour
stocker les données de la tâche et le Stack.

11/12/2025 20

10
FreeRTOS
Exemple

NULL );

NULL );

11/12/2025 21

FreeRTOS
Top Level Task States
Une application se compose de plusieurs tâches

11/12/2025 22

11
FreeRTOS
Creating a Delay

11/12/2025 23

FreeRTOS
Creating a Delay
• xTicksToDelay: Le nombre d’ interruptions « ticks » que la tâche appelante doit rester a l’état bloqué avant de
repasser a l’ état prêt. Par exemple, si une tache appelle vTaskDelay(100) a l’instant ou le compteur de tick égal a
10000, alors elle va passer immédiatement a l’état bloqué, et reste dans cet état jusqu’à ce compteur de tick
aura 10100 .

• La macro pdMS_TO_TICKS() peut être utilisée pour convertir le temps spécifié en ms en un temps spécifié par
un nombre de ticks. Par exemple vTaskDelay(pdMS_TO_TICKS(100)) permet de garder la tâche a l’état bloqué
pendant 100 millisecondes.

11/12/2025 24

12
FreeRTOS
Scheduler
• La tâche en exécution ( utilisant la CPU) est dans le « Running state »
• Les tâches qui ne sont pas en exécution, mais ne sont pas bloquées ni suspendues, sont dans un état prêt (Ready
state).
• Les tâches dans l’état prêt sont disponibles pour être sélectionner par l’ordonnanceur pour entrer en
exécution. L’ordonnanceur (Scheduler) choisira toujours la tâche la plus prioritaire parmi les tâches prêtes
pour entrer a l’état d’exécution.

• les tâches peuvent attendre, dans l’état bloqué, un évènement; et automatiquement passent a l’état prêt
dès que l’évènement se produit

11/12/2025 25

FreeRTOS
Configuring the Scheduling Algorithm
• L’algorithme d’ordonnancement est la routine logicielle qui décide quelle tâche prête doit entrer dans l’état
d’exécution.
• L’algorithme peut être configuré en spécifiant:
• configUSE_PREEMPTION
• configUSE_TIME_SLICING
• ces options doivent être configurer dans le fichier FreeRTOSConfig.h

11/12/2025 26

13
FreeRTOS
Configuring the Scheduling Algorithm

• Dans toutes les configurations possibles l’ordonnanceur utilise le Round Robin algorithm.

• Un ordonnancement d’algorithme Round Robin ne garanti pas « L’égalité » du temps partagé entre les tâches de
même priorité, seulement les tâches dans l’état prêt peuvent s’exécuter à tour de rôle.

11/12/2025 27

FreeRTOS
Prioritized Preemptive Scheduling with Time Slicing
• Configuration:
• configUSE_PREEMPTION set to 1
• configUSE_TIME_SLICING set to 1

• Configurer l’ordonnanceur de FreeRTOS pour utiliser l’algorithme appelé « Fixed Priority Preemptive Scheduling
with Time Slicing », qui est l’algorithme utilisé par la plupart des petites applications RTOS

11/12/2025 28

14
FreeRTOS
Prioritized Preemptive Scheduling with Time Slicing
• Avec:
• Fixed Priority: L’algorithme d’ordonnancement décrit comme ‘Fixed priority’ ne change pas la priorité
assignée aux tâches, mais il n’empêche pas les tâches de changer leur propre priorité ou celle d’autres
tâches.

• Preemptive: l’algorithme préemptive permet de ‘préempter’ immédiatement la tâche en exécution en


faveur d’autre tâche de priorité supérieure qui vient d’entrer dans l’état prêt. Être préemptée vaut dire
involontairement ( sans YIELD ou Bloquée explicitement) passer de l’état d’exécution à l’état prêt pour
autoriser une autre tâche qui veut entrer dans l’état d’exécution.

• Time Slicing : Time Slicing permet de partager le temps de traitement entre les tâches de même priorité.
L’algorithme d’ordonnancement sélectionne une nouvelle tâche à exécuter à la fin de chaque ’Time Slice’
s’il y a d’autres tâche de même priorité que la tâche en exécution dans l’état prêt. Un ‘Time Slice’ est égal
au temps entre deux interruptions ticks du RTOS:

11/12/2025 29

FreeRTOS
Prioritized Preemptive Scheduling with Time Slicing
Exemple:

11/12/2025 30

15
FreeRTOS
Prioritized Preemptive Scheduling (without Time Slicing
• Configuration:
• configUSE_PREEMPTION set to 1
• configUSE_TIME_SLICING set to 0

• Si le « Time Slicing » n’est pas utilisé, alors l’ordonnanceur va sélectionner une nouvelle tâche prête seulement
dans les cas:
• Une tâche de priorité supérieure entre dans l’état prêt
• La tâche en exécution entre en état bloqué ou suspendu.

11/12/2025 31

FreeRTOS
Prioritized Preemptive Scheduling (without Time Slicing)
Exemple:

11/12/2025 32

16
FreeRTOS
Co-operative Scheduling
• Configuration:
• configUSE_PREEMPTION set to 0
• configUSE_TIME_SLICING set to any value

• Quand le « Cooperative Scheduler » est utilsé, un changement de contexte ne peut se produire que si la tâche en
exécution entre en état bloqué, ou la tâche en exécution donne la CPU volontairement par l’appel de
taskYIELD().

11/12/2025 33

FreeRTOS
Co-operative Scheduling
Exemple:

11/12/2025 34

17
FreeRTOS
Caracteristics of a queue
• Une File peut stocker un nombre fini d’élément de taille fixe. Le nombre max qu’une file peut stocker s’appelle
« length ». La taille des éléments « item size » et la longueur de la file « length » sont spécifiées au moment de la
création de la file.
• Les files généralement de type FIFO

11/12/2025 35

FreeRTOS
Caracteristics of a queue
• Exemple

11/12/2025 36

18
FreeRTOS
• Exemple

11/12/2025 37

FreeRTOS
Access by Multiple Tasks

• Les files sont des objets accessibles par une tâche qui connaît leur existence. n'importe quel nombre de tâches
peuvent écrire dans la même file, et n'importe quel nombre de tâches peuvent lire a partir d’une file. En pratique
très souvent pour une file d’avoir multiple producteurs (écrivains), et rarement pour une file d’avoir plusieurs
lecteurs (consommateurs).

11/12/2025 38

19
FreeRTOS
Blocking on Queue Reads

• Quand une tâche tente de lire une donnée à partir d’une file (Queue), elle peut optionnellement spécifier un ‘blok
time’. C’est le temps que la tâche reste dans l’état bloqué en attente d’une donnée à être disponible dans la file. La
file est supposée vide.

• La tâche dans l’état bloqué, en attente d’une donné dans la file, passe automatiquement à l’état prêt dès qu’une
autre tâche place une donnée dans la file.

• La tâche va passer aussi automatiquement à l’état prêt si le ’Blok Time’ a été expiré avant que la donnée soit
disponible dans la file.

11/12/2025 39

FreeRTOS
Blocking on Queue Writes

• De même que pour la lecture, Une tâche peut optionnellement spécifier un Blok Time pour l’écriture dans la file.

• Dans ce cas, le Blok Time est le temps maximum pour que la tâche reste dans l’état bloqué pour attendre l’espace
disponible dans la file, la file supposée pleine.

11/12/2025 40

20
FreeRTOS
Using a Queue

11/12/2025 41

FreeRTOS
Using a Queue

• uxQueueLength: le nombre max des éléments qu'une file qui vient d’être créée puisse stocker.

• uxItemSize: La taille en octets de chaque élément peut être stocker dans la file.

• Return Value: Une valeur non-NULL retournée indique que la file est créée avec succès. La valeur de retour
doit être stockée dans le « handle » de la file créée.

11/12/2025 42

21
FreeRTOS
Write

11/12/2025 43

FreeRTOS
Write
• xQueue: Le handle pour la file recevant la donnée (Ecrite). Ce handle sera la valeur de retour de la fonction
xQueueCreate() utilisé pour créer la file.

• pvItemToQueue: Un pointeur à la donnée à copier dans la file.

• xTicksToWait: Le temps max pour une tâche bloquée en attente de l’espace disponible dans la file, la file supposée
pleine

• Return Value:
• pdPASS va être retourner seulement si la donnée est envoyée avec succès a la file.
• errQUEUE_FULL va être retourner si la donnée n’a pas pu être écrite parce que la file est déjà pleine.

11/12/2025 44

22
FreeRTOS
Read

11/12/2025 45

FreeRTOS
Read
• xQueue: Le handle pour la file recevant la donnée (Ecrite). Ce handle sera la valeur de retour de la fonction
xQueueCreate() utilisé pour créer la file.

• pvBuffer: Un pointeur à l’emplacement mémoire ou la donnée reçue doit être copiée.

• xTicksToWait: Le temps max pour une tâche bloquée en attente de la donné à être disponible dans la file, la file
supposée vide.

• Return Value:
• pdPASS va être retourner seulement si la donnée est lue avec succès a partir de la file.
• errQUEUE_EMPTY va être retourner si la donnée n’a pas pu être lue parce que la file est déjà vide.

11/12/2025 46

23
FreeRTOS
Example

11/12/2025 47

FreeRTOS
Example

11/12/2025 48

24
FreeRTOS
Example

11/12/2025 49

FreeRTOS
Binary Semaphore (Mutex)

• Les sémaphores binaires peuvent être considéré conceptuellement comme une file
d'attente de longueur 1.

• La file peut contenir au maximum un élément a un moment donné, alors toujours


soit vide ou remplie (Donc binaire).

11/12/2025 50

25
FreeRTOS
Init

11/12/2025 51

FreeRTOS
Init

• Return Value:
• Si la valeur de retour est NULL, alors le sémaphore n’as pas pu être crée à cause de l’insuffisance de mémoire
pour FreeRTOS pour allouer de l’espace aux données du sémaphore.

• Une valeur de retour non-NULL indique que le sémaphore a été créé avec succès. La valeur de retour doit être
stockée comme handle au sémaphore créé.

11/12/2025 52

26
FreeRTOS
Sem_P

11/12/2025 53

FreeRTOS
Sem_P

• xSemaphore: Le sémaphore étant ‘pris’.


• xTicksToWait: le maximum du temps une tache peut rester dans l’état bloqué en attente du
sémaphore si ce dernier n’est pas disponible. Affecter portMAX_DELAY à xTicksToWait cause
une attente indéfinie de la tâche (sans ‘timeout’) si INCLUDE_vTaskSuspend est positionné à
1 dans FreeRTOSConfig.h
• Valeur de retour:
• pdPASS si l’appel de xSemaphoreTake() a reussi d’obtenir le Sémaphore.
• pdFAIL si le sémaphore n’est pas disponible.

11/12/2025 54

27
FreeRTOS
Sem_V

11/12/2025 55

FreeRTOS
Init

• xSemaphore: Le sémaphore étant ‘donné’.


• Valeur de retour:
• pdPASS si l’appel de xSemaphoreGive() a reussi.
• pdFAIL si le sémaphore est déja disponible, donc ne peut être donné.

11/12/2025 56

28
FreeRTOS
Counting Semaphores

• Les sémaphores de comptage peuvent être considérés comme des files (Queues) de longueur supérieure a un.
• Les taches ne sont pas intéressées par les données stockées dans la file, mais juste par le nombre des éléments
dans la file.
• configUSE_COUNTING_SEMAPHORES doit être positionné dans FreeRTOSConfig.h

11/12/2025 57

FreeRTOS
Init

11/12/2025 58

29
FreeRTOS
Init

• uxMaxCount: La valeur maximale à compter par un sémaphore. Pour continuer l’analogie de la file
(Queue), la valeur de uxMaxCount est la longueur effective de la file.
• uxInitialCount: La valeur initiale de comptage du sémaphore après sa création.
• Valeur de retour:
• Si NULL est retournée, Alors le sémaphore n’a pas pu être crée a cause de l’insuffisance de la
mémoire ‘heap’ disponible pour FreeRTOS a allouer.
• Une valeur non-NULL indique que le sémaphore a été créé avec succès. La valeur de retour doit être
stockée comme ‘handle’ au sémaphore créé.

11/12/2025 59

FreeRTOS
Software Timers
• Les temporisateurs logiciels (Software Timers) sont utilisés pour programmer l'exécution d'une
fonction à une heure définie dans le futur, ou périodiquement avec une fréquence fixe. La fonction
exécutée par le temporisateur logiciel est appelée fonction de rappel (Callback function) du
temporisateur logiciel.

• Les temporisateurs logiciels sont implémentés par le noyau FreeRTOS et sont sous son contrôle. Ils
ne nécessitent pas de support matériel et ne sont pas liés aux temporisateurs matériels ou aux
compteurs matériels.

• Pour inclure la fonctionnalité de Software Timer:


1. Générez le fichier source FreeRTOS FreeRTOS/Source/timers.c dans le cadre de votre projet.
2. positionner configUSE_TIMERS à 1 dans FreeRTOSConfig.h.

11/12/2025 60

30
FreeRTOS
Software Timers
Software Timer Callback Functions Prototype

void ATimerCallback( TimerHandle_t xTimer );

Les fonctions de rappel du Software Timer s'exécutent du début à la fin et se terminent normalement. Ils doivent être
courtes et ne doivent pas entrer dans l'état Bloqué.

11/12/2025 61

FreeRTOS
Software Timers
Period of a Software Timer

La « période » d’un Software Timer est le temps entre le démarrage du Software Timer et l'exécution de la
fonction de rappel.

One-shot and Auto-reload Timers

1. One-shot Timer:
Une fois démarré, un One-shot Timer exécutera sa fonction de rappel une seule fois. Un
One-shot Timer peut être redémarré manuellement, mais ne redémarrera pas de lui-
même.

2. Auto-reload Timer:
1. Une fois démarré, un Auto-reload Timer redémarrera à chaque fois qu'il expirera, ce qui
entraînera l'exécution périodique de sa fonction de rappel.
11/12/2025 62

31
FreeRTOS
Software Timers
la différence de comportement entre One-shot Timer et Auto-reload Timer.

11/12/2025 63

FreeRTOS
Software Timers
Software Timer States

1. Dormant:
Un Software Timer dormant existe et peut être référencé par son handle, mais n'est pas en cours
d'exécution, de sorte que ses fonctions de rappel ne s'exécuteront pas.

2. Running
Un Software Timer en cours d'exécution exécutera sa fonction de rappel après qu'un temps égal à sa
période se soit écoulé depuis que le Timer est entré dans l'état de fonctionnement, ou depuis la
dernière réinitialisation..

11/12/2025 64

32
FreeRTOS
Software Timers
Transitions possibles entre les états Dormant et En cours d'exécution pour un One-shot Timer:

11/12/2025 65

FreeRTOS
Software Timers
Transitions possibles entre les états Dormant et En cours d'exécution pour un Auto-reload Timer:

11/12/2025 66

33
FreeRTOS
Software Timers
The Context of a Software Timer
• Toutes les fonctions de rappel du Sotware Timer s'exécutent dans le contexte de la même tâche (RTOS Daemon
Task) (ou « Timer service » task).

• La tâche deamon est une tâche FreeRTOS standard qui est créée automatiquement au démarrage du Scheduleur.

The Timer Command Queue


• Les fonctions de l'API du Sofware Timer envoient des commandes de la tâche appelante à la tâche deamon dans
une file d'attente appelée «Timer Command Queue ».

• Des exemples de commandes incluent: « démarrer un timer », « arrêter un timer » et « réinitialiser un timer ».

• La file de commandes du timer est une file FreeRTOS standard qui est créée automatiquement au démarrage du
Scheduleur.

11/12/2025 67

FreeRTOS
Software Timers

11/12/2025 68

34
FreeRTOS
Software Timers
Daemon Task Scheduling

• La tâche deamon est schedulée (planifiée) comme n'importe quelle autre tâche FreeRTOS ; il ne traitera les
commandes ou n'exécutera les fonctions de rappel du timer que lorsqu'il s'agit de la tâche la plus prioritaire.

11/12/2025 69

FreeRTOS
Software Timers
Daemon Task Scheduling
le modèle d'exécution lorsque la priorité de la tâche deamon est inférieure à la priorité d'une tâche qui appelle la fonction API
xTimerStart().

11/12/2025 70

35
FreeRTOS
Software Timers
Daemon Task Scheduling
la priorité de la tâche deamon est supérieure à la priorité de la tâche qui appelle xTimerStart().

11/12/2025 71

FreeRTOS
Software Timers
Creating and Starting a Software Timer:

The xTimerCreate() API Function

11/12/2025 72

36
FreeRTOS
Software Timers
Creating and Starting a Software Timer:
The xTimerCreate() API Function
pcTimerName : Un nom descriptif pour le timer.

xTimerPeriodInTicks: La période de la minuterie spécifiée en ticks. La macro pdMS_TO_TICKS() peut être utilisée
pour convertir un temps spécifié en millisecondes en un temps spécifié en ticks.
uxAutoReload : Positionner uxAutoReload sur pdTRUE pour créer un Auto-reload timer.
positionner uxAutoReload sur pdFALSE pour créer un one-shot timer.
pvTimerID: Chaque Software Timer a une valeur d'identification. L'ID est un pointeur void et peut
être utilisé par le programmeur de l'application à n'importe quelle fin. L'ID est particulièrement
utile lorsque la même fonction de rappel est utilisée par plusieurs timers.
pxCallbackFunction : Le paramètre pxCallbackFunction est un pointeur vers la fonction (en fait, juste le nom de la
fonction) à utiliser comme fonction de rappel pour le software timer en cours de création.

Returned value: Si NULL est renvoyé, le timer ne peut pas être créé car il n'y a pas suffisamment de
mémoire de tas (Heap) disponible pour que FreeRTOS alloue la structure de données nécessaire.
Une valeur non-NULL renvoyée indique que le timer a été créé avec succès.
11/12/2025 73
La valeur renvoyée est le handle du timer créé.

FreeRTOS
Software Timers
The xTimerStart() API Function
xTimerStart() est utilisé pour démarrer un Sofware Timer qui est dans l'état Dormant, ou réinitialiser (redémarrer) un
Software Timer qui est dans l'état En cours d'exécution.

xTimerStop() est utilisé pour arrêter un Software Timer qui est dans l'état Running. L'arrêt d’un timer revient à faire
passer le timer à l'état Dormant.

11/12/2025 74

37
FreeRTOS
Software Timers
The xTimerStart() API Function
xTimer : Le Handle du timer en cours de démarrage ou de réinitialisation. Le handle aura été renvoyé par l'appel à
xTimerCreate() utilisé pour créer le timer logiciel.

xTicksToWait: xTimerStart() utilise la file d'attente de commandes du timer pour envoyer la commande "démarrer
un timer" à la tâche démon. xTicksToWait spécifie la durée maximale pendant laquelle la tâche
appelante doit rester dans l'état Bloqué pour attendre que l'espace se libère dans la file
d'attente de commandes du timer, si la file d'attente est déjà pleine.

Valeur de retour: pdPASS ne sera renvoyé que si la commande "démarrer un timer" a été envoyée avec succès à la file
d'attente des commandes du timer.
pdFALSE sera renvoyé si la commande "démarrer un timer" n'a pas pu être écrite dans la file
d'attente des commandes du timer car la file d'attente était déjà pleine.

11/12/2025 75

#define mainONE_SHOT_TIMER_PERIOD pdMS_TO_TICKS( 3333 )


#define mainAUTO_RELOAD_TIMER_PERIOD pdMS_TO_TICKS( 500 )
int main( void )
{
TimerHandle_t xAutoReloadTimer, xOneShotTimer;
BaseType_t xTimer1Started, xTimer2Started;
xOneShotTimer = xTimerCreate(
"OneShot",
mainONE_SHOT_TIMER_PERIOD,
pdFALSE,
0,
prvOneShotTimerCallback );
xAutoReloadTimer = xTimerCreate("AutoReload",
mainAUTO_RELOAD_TIMER_PERIOD,
pdTRUE,
0,
prvAutoReloadTimerCallback );
if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) ) {
xTimer1Started = xTimerStart( xOneShotTimer, 0 );
xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
if( ( xTimer1Started == pdPASS ) && ( xTimer2Started == pdPASS ) )
{
/* Start the scheduler. */
vTaskStartScheduler();
}
}
11/12/2025 for( ;; ); 76
}

38
FreeRTOS
Software Timers
Example: Creating one-shot and auto-reload timers

static void prvOneShotTimerCallback( TimerHandle_t xTimer ) {


TickType_t xTimeNow;
/* Obtain the current tick count. */
xTimeNow = xTaskGetTickCount(); /* Output a string to show the
time at which the callback was executed. */
vPrintStringAndNumber( "One-shot timer callback executing",
xTimeNow );
/* File scope variable. */
ulCallCount++; }

11/12/2025 77

FreeRTOS
Software Timers
Example: Creating one-shot and auto-reload timers

static void prvAutoReloadTimerCallback( TimerHandle_t xTimer ) {


TickType_t xTimeNow;
/* Obtain the current tick count. */
xTimeNow = uxTaskGetTickCount(); /* Output a string to show the time at
which the callback was executed. */
vPrintStringAndNumber( "Auto-reload timer callback executing",
xTimeNow );
ulCallCount++; }

11/12/2025 78

39
FreeRTOS
Software Timers
Example: Creating one-shot and auto-reload timers

11/12/2025 79

FreeRTOS
2ème Partie

1. Heap Memory Management


2. Interrupt Management
3. Ressources Management
4. Event Groups
5. Task Notifications

Références:

[Link]

11/12/2025 80

40
FreeRTOS

11/12/2025 81

FreeRTOS

11/12/2025 82

41
FreeRTOS
Exercices d’application

1. Ecrire un programme permettant la mise en œuvre d’une communication entre 2 tâches :

• Task 1 : Lire une valeur analogique (une mesure) et envoie la valeur lue a la tâche (Task 2)
• Task 2 : Reçoit La valeur envoyée par « Task 1 » et l’affiche dans le moniteur série

2. Ecrire 2 ‘Auto-reload timers’ chaqu’un fait clignoter une LED avec 2 fréquences différentes

11/12/2025 83

42

Vous aimerez peut-être aussi