Ce module regroupe les API permettant de gérer les sémaphores. Les sémaphores sont des compteurs permettant de gérer l'accès à des ressources partagées et de synchroniser des tâches.
Lorsqu'une tâche est en attente sur le sémaphore, le sémaphore est défini sur l'ID de tâche.
AVRX_PEND signifie que la ressource liée au sémaphore est occupée (Sem = 0) alors que AVRX_DONE signifie que la ressource est libre (Sem > 0). Une tâche bloquera seulement si elle tente de s'emparer d'un sémaphore à l'état AVRX_PEND.
Les sémaphores sont initialisées à l'état AVRX_PEND et sont laissés à l'état AVRX_PEND après chaque opération complète.
Les processus peuvent attendre qu'un sémaphore soit libre. Cela sera possible que si le sémaphore a été mis à AVRX_PEND avant le premier appel. Quand un processus a terminé avec le sémaphore, il le libère en le mettant à AVRX_PEND.
|
#define | AVRX_DONE ((xSem)1) |
| Ressource Libre, terminé !
|
|
#define | AVRX_PEND ((xSem)0) |
| Ressource Occupée ! revenir plus tard ...
|
|
#define | AVRX_WAIT ((xSem)2) |
| Une ou plusieurs tâches sont en attente de libération de la ressource.
|
|
Compteurs permettant de gérer l'accès à des ressources partagées.
Les sémaphores sont des compteurs permettant de gérer l'accès à des ressources partagées.
Dans AvrX :
- Les sémaphores xSem sont implémentés sous la forme d'une liste chaînée simple des tâches en attente.
- Un sémaphore peut avoir une des valeurs ci-dessous :
- AVRX_PEND Le sémaphore est occupé en attente d'un événement
- AVRX_DONE Le sémaphore a été libéré
- AVRX_WAIT ??
- Toute autre valeur est l'adresse d'un xProcess
Définition à la ligne 221 du fichier avrx.h.
void vAvrXIntSetSemaphore |
( |
xSem * |
pxSem | ) |
|
Libère un sémaphore si il n'est pas déjà libre (Mode noyau)
Identique à vAvrXSetSemaphore() pour une utilisation en mode noyau.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
- Avertissement
- Ne peut être appelée qu'à partir du mode noyau AvrX (par exemple l'intérieur d'un gestionnaire d'interruption).
void vAvrXResetObjectSemaphore |
( |
xSem * |
pxSem | ) |
|
Force un sémaphore d'un objet à passer à l'état AVRX_PEND.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
void vAvrXResetSemaphore |
( |
xSem * |
pxSem | ) |
|
Force un sémaphore à passer à l'état AVRX_PEND.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
void vAvrXSetSemaphore |
( |
xSem * |
pxSem | ) |
|
Libère un sémaphore si il n'est pas déjà libre.
Si sémaphore est à l'état AVRX_PEND ou AVRX_DONE, passe à l'état AVRX_DONE.
Si une tâche est en attente, l'exécute et passe le sémaphore à l'état AVRX_PEND.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
- Exemples:
- avrx/tutorial2/demo_avrx_tuto2.c.
void vAvrXWaitSemaphore |
( |
xSem * |
pxSem | ) |
|
Mets une tâche en attente de libération d'un sémaphore.
S'il est utilisé pour à des fins de signalisation, une seule tâche doit attendre la libération du sémaphore.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
- Exemples:
- avrx/tutorial2/demo_avrx_tuto2.c.
xSem xAvrXIntTestSemaphore |
( |
xSem * |
pxSem | ) |
|
Renvoie l'état d'un sémaphore (Mode noyau)
Identique à xAvrXTestSemaphore() pour une utilisation en mode noyau.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
- Renvoie
- AVRX_PEND, AVRX_DONE ou AVRX_WAIT
- Avertissement
- Ne peut être appelée qu'à partir du mode noyau AvrX (par exemple l'intérieur d'un gestionnaire d'interruption).
Renvoie l'état d'un sémaphore.
- Paramètres
-
pxSem | Pointeur sur le semaphore |
- Renvoie
- AVRX_PEND, AVRX_DONE ou AVRX_WAIT