Les machines d'état sont des compteurs atomiques partagés par plusieurs threads. Les opérations de base sur les machines d'état sont :
- modifier le compteur de manière atomique.
- attendre que le compteur soit à une certaine valeur et lui en affecter une autre (tout cela de façon atomique).
|
typedef volatile uint8_t | xState |
| Le type xState est une variable atomique qui peut évoluer entre 0 et 255.
|
|
void vStateSet |
( |
xState * |
pxState, |
|
|
uint8_t |
ucValue |
|
) |
| |
Affecte la valeur d'une machine d'état de façon atomique.
- Paramètres
-
pxState | pointeur sur la machine d'état |
ucValue | valeur à assigner |
void vStateSwitch |
( |
xState * |
pxState, |
|
|
uint8_t |
ucFrom, |
|
|
uint8_t |
ucTo |
|
) |
| |
vStateSwitch suspend le thread appelant jusqu'à ce que le compteur de la machine d'état pointée par pxState valle {ucFrom}. Alors, le compteur est affecté à la valeur {ucTo}.
- Paramètres
-
pxState | pointeur sur la machine d'état |
ucFrom | valeur à attendre |
ucTo | valeur à assigner |
void vStateWait |
( |
xState * |
pxState, |
|
|
uint8_t |
ucValue |
|
) |
| |
vStateWait suspend le thread appelant jusqu'à ce que le compteur de la machine d'état pointée par pxState valle {ucValue}.
- Paramètres
-
pxState | pointeur sur la machine d'état |
ucValue | valeur à attendre |
uint8_t xStateGet |
( |
xState * |
pxState | ) |
|
Lit la valeur d'une machine d'état de façon atomique.
- Paramètres
-
pxState | pointeur sur la machine d'état à lire |
- Renvoie
- la valeur lue.
int8_t xStateTryswitch |
( |
xState * |
pxState, |
|
|
uint8_t |
ucFrom, |
|
|
uint8_t |
ucTo |
|
) |
| |
xStateTryswitch est une variante non bloquante de vStateSwitch().
- Paramètres
-
pxState | pointeur sur la machine d'état à attendre |
- Renvoie
- 0 si machine d'état affectée, -1 sinon
- Note
- Cette fonction ne bloque jamais et peut être utilisée de manière fiable dans un gestionnaire de signaux.
int8_t xStateTrywait |
( |
xState * |
pxState, |
|
|
uint8_t |
ucValue |
|
) |
| |
xStateTrywait est une variante non bloquante de vStateWait().
- Paramètres
-
pxState | pointeur sur la machine d'état à attendre |
- Renvoie
- 0 Si la machine d'état pointé par {pxState} vaut {ucValue}, -1 sinon
- Note
- Cette fonction ne bloque jamais et peut être utilisée de manière fiable dans un gestionnaire de signaux.