25 # include <avrio/defs.h> 40 # if defined(__DOXYGEN__) 50 # define AVRX_DECLARE_TASK(task_name, stack_size, priority) 60 # define AVRX_FUNC(task_name) 72 # define AVRX_TASK(task_name, stack_size, priority) 80 # define AVRX_EXTERN_TASK(task_name) 91 # define AVRX_NAKED_FUNC(task_name) 99 # define PID(task_name) 107 # define TCB(task_name) 119 # define xAvrXInitTask (task_name); 130 # define vAvrXRunTask (task_name); 231 void * ContextPointer;
232 # ifdef AVRX_SINGLESTEP_ENABLE 248 void (*start) (void);
486 # define AVRX_PEND ((xSem)0) 491 # define AVRX_DONE ((xSem)1) 496 # define AVRX_WAIT ((xSem)2) 774 # if !defined(__DOXYGEN__) 780 # define MINCONTEXT 35 // 32 registers, return address and SREG 782 # define AVRX_NAKED_FUNC(function) void function(void) NAKED;\ 785 # define AVRX_FUNC(function) void function(void) CTASK;\ 788 # define AVRX_DECLARE_TASK(task_name, stack_size, priority) \ 789 char task_name ## Stk [stack_size + MINCONTEXT] ; \ 790 AVRX_FUNC(task_name); \ 791 xProcess task_name ## Pid; \ 792 xTcb task_name ## Tcb = \ 794 &task_name##Stk[sizeof(task_name##Stk)-1] , \ 800 # define AVRX_TASK(task_name, stack_size, priority) \ 801 AVRX_DECLARE_TASK(task_name, stack_size, priority); \ 804 # define AVRX_EXTERN_TASK(task_name) \ 805 AVRX_FUNC(task_name); \ 806 extern xTcb task_name##Tcb; \ 807 extern xProcess task_name##Pid 809 # define PID(task_name) (&task_name##Pid) 811 # define TCB(task_name) (&task_name##Tcb) 813 # define xAvrXInitTask(task_name) xAvrXInitTcb(TCB(task_name)) 815 # define vAvrXRunTask(task_name) vAvrXRunTcb(TCB(task_name)) Bloc de contrôle de tâche.
void vAvrXWaitTask(xPid xP)
Synchronisation bloquante avec une autre tâche.
void vAvrXYield(void)
Retire le processeur à la tâche en cours.
xMessage * pxAvrXWaitMessage(xMessageQueue *pxQueue)
Attente de réception d'un message.
uint8_t xAvrXChangePriority(xPid xP, uint8_t xNewPriority)
Modifie la priorité d'une tâche.
void vAvrXResetSemaphore(xSem *pxSem)
Force un sémaphore à passer à l'état AVRX_PEND.
void vAvrXWaitTimer(xTimer *pxTimer)
Attente de l'expiration d'un timer.
xSem xAvrXTestMessageAck(xMessage *pxMessage)
Teste si un accusé réception a été reçue.
xSem xAvrXTestSemaphore(xSem *pxSem)
Renvoie l'état d'un sémaphore.
void vAvrXTaskExit(void)
Tue la tâche en cours.
xSem xAvrXTestPid(xPid xP)
Renvoie l'état d'une tâche.
struct xMessage xMessage
Message.
xMessage * pxAvrXRecvMessage(xMessageQueue *pxQueue)
Renvoie le premier message d'une file.
void vAvrXDelay(xTimer *pxTimer, uint16_t xTicksWait)
Version bloquante de vAvrXStartTimer()
void vAvrXSetSemaphore(xSem *pxSem)
Libère un sémaphore si il n'est pas déjà libre.
struct xProcess xProcess
Un processus.
uint16_t usAvrXReadEEPromWord(const uint16_t *pusAddress)
Lecture d'un mot en EEPROM.
uint8_t xAvrXPriority(xPid xP)
Renvoie la priorité courante d'une tâche.
xTimer * pxAvrXCancelTimer(xTimer *pxTimer)
Retire un timer de la file des timers.
uint8_t xAvrXSingleStepNext(xPid xP)
Avance d'un pas une tâche passée en mode «pas à pas»
void vAvrXWaitMessageAck(xMessage *pxMessage)
Attente d'un accusé réception d'une file de message.
xSem xAvrXIntTestSemaphore(xSem *pxSem)
Renvoie l'état d'un sémaphore (Mode noyau)
void vAvrXResume(xPid xP)
Reprend l'exécution d'un processus.
void * pvAvrXSetKernelStack(void *pNewStack)
Modifie la pile AvrX.
xPid xSem
Compteurs permettant de gérer l'accès à des ressources partagées.
void vAvrXAckMessage(xMessage *pxMessage)
Envoie un accusé réception à travers une file de message.
void vAvrXRunTcb(xTcb *pxTcb)
Démarre une tâche.
void vAvrXHalt(void)
Arrête le processeur (erreur seulement)
uint8_t ucAvrXReadEEProm(const uint8_t *pucAddress)
Lecture d'un octet en EEPROM.
void vAvrXStartTimerMessage(xTimerMessage *pxTimer, uint16_t xTicksWait, xMessageQueue *pxQueue)
Ajoute un timer un timer qui envoie un message à son expiration dans la file des timers et le démarre...
void vAvrXWaitSemaphore(xSem *pxSem)
Mets une tâche en attente de libération d'un sémaphore.
void vAvrXIntSendMessage(xMessageQueue *pxQueue, xMessage *pxMessage)
Envoie un message dans une file (Mode noyau)
struct xTimer xTimer
Timer.
xMessage * pxAvrXCancelTimerMessage(xTimerMessage *pxTimer, xMessageQueue *pxQueue)
Retire un timer démarré avec vAvrXStartTimerMessage() de la file des timers.
struct xTcb xTcb
Bloc de contrôle de tâche.
struct xMessageQueue xMessageQueue
File de messages.
xSem xAvrXTestTimer(xTimer *pxTimer)
Teste l'état d'un timer.
uint8_t xAvrXSingleStep(xPid xP)
Passe une tâche en mode «pas à pas»
void vAvrXSuspend(xPid xP)
Suspend l'exécution d'une tâche.
void vAvrXSendMessage(xMessageQueue *pxQueue, xMessage *pxMessage)
Envoie un message dans une file.
void vAvrXTerminate(xPid xP)
Tue une tâche.
xPid pxAvrXSelf(void)
Renvoie le PID de la tâche en cours.
void vAvrXStartTimer(xTimer *pxTimer, uint16_t xTicksWait)
Ajoute un timer dans la file des timers et le démarre.
struct xTimerMessage xTimerMessage
Timer Message.
void vAvrXIntReschedule(void)
Permet une organisation collaborative au sein de l'organisation préemptive par priorité.
void vAvrXWriteEEProm(uint8_t *pucAddress, uint8_t ucByte)
Ecriture d'un octet en EEPROM.
void vAvrXResetObjectSemaphore(xSem *pxSem)
Force un sémaphore d'un objet à passer à l'état AVRX_PEND.
void vAvrXIntSetSemaphore(xSem *pxSem)
Libère un sémaphore si il n'est pas déjà libre (Mode noyau)
xPid xAvrXInitTcb(xTcb *pxTcb)
Initialise une tâche.
xProcess * xPid
Identifiant d'une tâche.