AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
Gestion des tâches

Description détaillée

Ce module regroupe les API de gestion de tâches.

Graphe de collaboration de Gestion des tâches:

Modules

 Déboguage
 

Structures de données

struct  xProcess
 Un processus. Plus de détails...
 
struct  xTcb
 Bloc de contrôle de tâche. Plus de détails...
 

Fonctions

void * pvAvrXSetKernelStack (void *pNewStack)
 Modifie la pile AvrX. Plus de détails...
 
xPid pxAvrXSelf (void)
 Renvoie le PID de la tâche en cours. Plus de détails...
 
void vAvrXIntReschedule (void)
 Permet une organisation collaborative au sein de l'organisation préemptive par priorité. Plus de détails...
 
void vAvrXResume (xPid xP)
 Reprend l'exécution d'un processus. Plus de détails...
 
void vAvrXRunTcb (xTcb *pxTcb)
 Démarre une tâche. Plus de détails...
 
void vAvrXStart (void)
 
void vAvrXSuspend (xPid xP)
 Suspend l'exécution d'une tâche. Plus de détails...
 
void vAvrXTaskExit (void)
 Tue la tâche en cours. Plus de détails...
 
void vAvrXTerminate (xPid xP)
 Tue une tâche. Plus de détails...
 
void vAvrXWaitTask (xPid xP)
 Synchronisation bloquante avec une autre tâche. Plus de détails...
 
void vAvrXYield (void)
 Retire le processeur à la tâche en cours. Plus de détails...
 
uint8_t xAvrXChangePriority (xPid xP, uint8_t xNewPriority)
 Modifie la priorité d'une tâche. Plus de détails...
 
xPid xAvrXInitTcb (xTcb *pxTcb)
 Initialise une tâche. Plus de détails...
 
uint8_t xAvrXPriority (xPid xP)
 Renvoie la priorité courante d'une tâche. Plus de détails...
 
xSem xAvrXTestPid (xPid xP)
 Renvoie l'état d'une tâche. Plus de détails...
 

Macros

#define AVRX_DECLARE_TASK(task_name, stack_size, priority)
 Déclare et initialise un xTcb. Plus de détails...
 
#define AVRX_EXTERN_TASK(task_name)
 Déclare un xTcb et une fonction de tâche externe. Plus de détails...
 
#define AVRX_FUNC(task_name)
 Fonction exécutée par une tâche. Plus de détails...
 
#define AVRX_NAKED_FUNC(task_name)
 Fonction exécutée par une tâche. Plus de détails...
 
#define AVRX_TASK(task_name, stack_size, priority)
 Déclare et initialise un xTcb et définie le corps de la fonction exécutée par la tâche. Plus de détails...
 
#define PID(task_name)
 Renvoie le pointeur sur l'identifiant d'une tâche. Plus de détails...
 
#define TCB(task_name)
 Renvoie le pointeur sur le xTcb d'une tâche. Plus de détails...
 
#define vAvrXRunTask   (task_name);
 Démarre une tâche. Plus de détails...
 
#define xAvrXInitTask   (task_name);
 Initialise une tâche. Plus de détails...
 

Définitions de type

typedef xProcessxPid
 Identifiant d'une tâche. Plus de détails...
 
typedef struct xProcess xProcess
 Un processus. Plus de détails...
 
typedef struct xTcb xTcb
 Bloc de contrôle de tâche. Plus de détails...
 

Documentation des macros

#define AVRX_DECLARE_TASK (   task_name,
  stack_size,
  priority 
)

Déclare et initialise un xTcb.

Paramètres
task_nameNom de la tâche
stack_sizeNombre d'octets réservés à la pile de la tâche
priorityPriorité de la tâche (1 est plus prioritaire que 2)
Exemples:
avrx/message/demo_avrx_message.c.

Définition à la ligne 50 du fichier avrx.h.

#define AVRX_EXTERN_TASK (   task_name)

Déclare un xTcb et une fonction de tâche externe.

Paramètres
task_nameNom de la tâche

Définition à la ligne 80 du fichier avrx.h.

#define AVRX_FUNC (   task_name)

Fonction exécutée par une tâche.

Définie le corps d'une fonction exécutée par une tâche .
Une fonction de ce type de prend aucun paramètre et ne retourne jamais.

Paramètres
task_nameNom de la tâche

Définition à la ligne 60 du fichier avrx.h.

#define AVRX_NAKED_FUNC (   task_name)

Fonction exécutée par une tâche.

Définie le corps d'une fonction exécutée par une tâche .
Une fonction de ce type de prend aucun paramètre et ne retourne jamais.
NACKED indique que cette fonction ...

Paramètres
task_nameNom de la tâche

Définition à la ligne 91 du fichier avrx.h.

#define AVRX_TASK (   task_name,
  stack_size,
  priority 
)

Déclare et initialise un xTcb et définie le corps de la fonction exécutée par la tâche.

Equivalent à AVRX_DECLARE_TASK() suivi de AVRX_FUNC()

Paramètres
task_nameNom de la tâche
stack_sizeNombre d'octets réservés à la pile de la tâche
priorityPriorité de la tâche (1 est plus prioritaire que 2)
Exemples:
avrx/message/demo_avrx_message.c, avrx/tutorial1/demo_avrx_tuto1.c, et avrx/tutorial2/demo_avrx_tuto2.c.

Définition à la ligne 72 du fichier avrx.h.

#define PID (   task_name)

Renvoie le pointeur sur l'identifiant d'une tâche.

Paramètres
task_nameNom de la tâche

Définition à la ligne 99 du fichier avrx.h.

#define TCB (   task_name)

Renvoie le pointeur sur le xTcb d'une tâche.

Paramètres
task_nameNom de la tâche

Définition à la ligne 107 du fichier avrx.h.

#define vAvrXRunTask   (task_name);

Démarre une tâche.

Démarre une tâche en appelant d'abord xAvrXInitTask() puis vAvrXResume().
vAvrXRunTask() ou vAvrXResume() doivent être appelé par le main() afin d'insérer la tâche dans la file d'exécution.

Paramètres
task_nameNom de la tâche
Exemples:
avrx/message/demo_avrx_message.c, avrx/tutorial1/demo_avrx_tuto1.c, et avrx/tutorial2/demo_avrx_tuto2.c.

Définition à la ligne 130 du fichier avrx.h.

#define xAvrXInitTask   (task_name);

Initialise une tâche.

Initialise une tâche en initialisant et en sauvegardant son contexte sur la pile. Le contexte est constitué de tous les registres de calcul du processeur. Tous ces registres sont initialisés à zéro.

Paramètres
task_nameNom de la tâche
Renvoie
le pid ?

Définition à la ligne 119 du fichier avrx.h.

Documentation des définitions de type

typedef xProcess* xPid

Identifiant d'une tâche.

Un identifiant de tâche (pid) est un pointeur sur le bloc de RAM qui contient l'état de cette tâche.

Définition à la ligne 202 du fichier avrx.h.

typedef struct xProcess xProcess

Un processus.

Bloc de RAM qui contient l'état de la tâche.

typedef struct xTcb xTcb

Bloc de contrôle de tâche.

Le Bloc de contrôle de tâche (Task Control Block) contient toutes les informations nécessaires à l'initialisation et au démarrage d'une tâche.
Ce bloc est stocké en FLASH. Il est utilisé uniquement par xAvrXInitTcb() ou vAvrXRunTcb().

Documentation des fonctions

void* pvAvrXSetKernelStack ( void *  pNewStack)

Modifie la pile AvrX.

Paramètres
pNewStackPointeur sur la fin de la nouvelle pile, si 0 la pile AvrX est initialisée à la valeur actuelle du pointeur de pile (SPH/SPL).
Renvoie
Pointeur sur la fin de la nouvelle pile
xPid pxAvrXSelf ( void  )

Renvoie le PID de la tâche en cours.

Renvoie
Le PID de la tâche en cours d'exécution
void vAvrXIntReschedule ( void  )

Permet une organisation collaborative au sein de l'organisation préemptive par priorité.

Réordonne la file d'exécution en passant la tâche de début en fin de file.

Avertissement
Ne peut être appelée qu'à partir du mode noyau AvrX (par exemple l'intérieur d'un gestionnaire d'interruption).
void vAvrXResume ( xPid  xP)

Reprend l'exécution d'un processus.

Obtient une tâche prête à s'exécuter en insérant son PID dans la file d'exécution

Paramètres
xPPointeur sur la tâche
void vAvrXRunTcb ( xTcb pxTcb)

Démarre une tâche.

Démarre une tâche en appelant d'abord xAvrXInitTcb() puis vAvrXResume().
vAvrXRunTcb() ou vAvrXResume() doivent être appelé par le main() afin d'insérer la tâche dans la file d'exécution.

Paramètres
pxTcbPointeur sur le bloc de contrôle de la tâche
void vAvrXStart ( void  )

Démarre le noyau AvrX et ne retourne jamais

Il est nécessaire d'insérer au moins une tâche dans la file d'exécution avec vAvrXRunTask() ou vAvrXResume() avant d'appeler cette fonction.

Exemples:
avrx/message/demo_avrx_message.c, avrx/tutorial1/demo_avrx_tuto1.c, et avrx/tutorial2/demo_avrx_tuto2.c.
void vAvrXSuspend ( xPid  xP)

Suspend l'exécution d'une tâche.

Marque un PID pour la suspension en attente de retrait de la file d'exécution.

Paramètres
xPPointeur sur la tâche
void vAvrXTaskExit ( void  )

Tue la tâche en cours.

Doit être appelée quand une tâche est terminée et ne fonctionnera plus. Cette fonction agit comme le «return» dans une fonction normale.
Idéalement, la tâche doit être inactive (pas en attente d'un sémaphore ou d'un message) avant que cette fonction soit appelée.

void vAvrXTerminate ( xPid  xP)

Tue une tâche.

Identique à vAvrXTaskExit() si ce n'est que cette fonction permet de tuer une autre tâche.

Paramètres
xPPointeur sur la tâche
void vAvrXWaitTask ( xPid  xP)

Synchronisation bloquante avec une autre tâche.

Permet d'attendre qu'une tâche passe à l'état d'exécution.

Paramètres
xPPointeur sur la tâche
void vAvrXYield ( void  )

Retire le processeur à la tâche en cours.

Retire le processeur à la tâche en cours et la réinsère dans la file des tâches en exécution. Si d'autres tâches de même priorité sont dans la file, la tâche qui abandonne le processeur est insérée en fin de file (algorithme Round Robin).

uint8_t xAvrXChangePriority ( xPid  xP,
uint8_t  xNewPriority 
)

Modifie la priorité d'une tâche.

Paramètres
xPPointeur sur la tâche
xNewPriorityNouvelle valeur de priorité (1 est plus prioritaire que 2)
Renvoie
La priorité avant modification (1 est plus prioritaire que 2)
xPid xAvrXInitTcb ( xTcb pxTcb)

Initialise une tâche.

Initialise une tâche en initialisant et en sauvegardant son contexte sur la pile. Le contexte est constitué de tous les registres de calcul du processeur. Tous ces registres sont initialisés à zéro.

Paramètres
pxTcbPointeur sur le bloc de contrôle de la tâche
Renvoie
Identifiant du processus initialisé
uint8_t xAvrXPriority ( xPid  xP)

Renvoie la priorité courante d'une tâche.

Paramètres
xPPointeur sur la tâche
Renvoie
La priorité courante (1 est plus prioritaire que 2)
xSem xAvrXTestPid ( xPid  xP)

Renvoie l'état d'une tâche.

Paramètres
xPPointeur sur la tâche
Renvoie
AVRX_PEND, AVRX_DONE or AVRX_WAIT