one hour slave program this waits for entry from master and initialize queue in the begninng and execute the data.

Dependencies:   mbed

Committer:
manujose
Date:
Sat Dec 04 06:09:47 2010 +0000
Revision:
0:6be670be8b35

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
manujose 0:6be670be8b35 1 #ifndef _PQUEUE_H_
manujose 0:6be670be8b35 2 #define _PQUEUE_H_
manujose 0:6be670be8b35 3
manujose 0:6be670be8b35 4 typedef struct prioQueueEle {
manujose 0:6be670be8b35 5 timeval t;
manujose 0:6be670be8b35 6 void (*foo)(void);
manujose 0:6be670be8b35 7 int sched;
manujose 0:6be670be8b35 8 struct prioQueueEle *next;
manujose 0:6be670be8b35 9 }qEle;
manujose 0:6be670be8b35 10 typedef struct prioQueue {
manujose 0:6be670be8b35 11 int numEle;
manujose 0:6be670be8b35 12 qEle *head;
manujose 0:6be670be8b35 13
manujose 0:6be670be8b35 14 }pQueue;
manujose 0:6be670be8b35 15
manujose 0:6be670be8b35 16
manujose 0:6be670be8b35 17
manujose 0:6be670be8b35 18 int enqueue(pQueue *xP, timeval t, void (*schedFunc)(void)) {
manujose 0:6be670be8b35 19 if (xP->numEle == QUEUE_MAX)
manujose 0:6be670be8b35 20 return 0; //ERROR reached max .
manujose 0:6be670be8b35 21
manujose 0:6be670be8b35 22 xP->numEle++;
manujose 0:6be670be8b35 23 qEle *newEle = (qEle*)malloc(sizeof(qEle));
manujose 0:6be670be8b35 24 newEle->t.tv_sec = t.tv_sec;
manujose 0:6be670be8b35 25 newEle->t.tv_usec = t.tv_usec;
manujose 0:6be670be8b35 26 newEle->foo = schedFunc;
manujose 0:6be670be8b35 27 newEle->sched = 0;
manujose 0:6be670be8b35 28 newEle->next = NULL;
manujose 0:6be670be8b35 29 if (xP->head == NULL) { //first ele;
manujose 0:6be670be8b35 30 xP->head = newEle;
manujose 0:6be670be8b35 31 return 1;
manujose 0:6be670be8b35 32 } else {
manujose 0:6be670be8b35 33 if ((xP->head->t.tv_sec > t.tv_sec) ||
manujose 0:6be670be8b35 34 ((xP->head->t.tv_sec == t.tv_sec ) && (xP->head->t.tv_usec > t.tv_usec)) ) {
manujose 0:6be670be8b35 35 newEle->next = xP->head;
manujose 0:6be670be8b35 36 xP->head = newEle;
manujose 0:6be670be8b35 37
manujose 0:6be670be8b35 38 return 1;
manujose 0:6be670be8b35 39 } else if (xP->head->next == NULL) {
manujose 0:6be670be8b35 40 xP->head->next = newEle;
manujose 0:6be670be8b35 41 return 1;
manujose 0:6be670be8b35 42 }
manujose 0:6be670be8b35 43 }
manujose 0:6be670be8b35 44 qEle *e = xP->head;
manujose 0:6be670be8b35 45 while (e->next->next !=NULL) {
manujose 0:6be670be8b35 46 if ((e->next->t.tv_sec > t.tv_sec) ||
manujose 0:6be670be8b35 47 ((e->next->t.tv_sec == t.tv_sec) && (e->next->t.tv_usec > t.tv_usec)) ) {
manujose 0:6be670be8b35 48 newEle->next = e->next;
manujose 0:6be670be8b35 49 e->next = newEle;
manujose 0:6be670be8b35 50 return 1;
manujose 0:6be670be8b35 51 }
manujose 0:6be670be8b35 52 e= e->next;
manujose 0:6be670be8b35 53 }
manujose 0:6be670be8b35 54 e->next->next = newEle;
manujose 0:6be670be8b35 55 return 1;
manujose 0:6be670be8b35 56 }
manujose 0:6be670be8b35 57
manujose 0:6be670be8b35 58
manujose 0:6be670be8b35 59
manujose 0:6be670be8b35 60
manujose 0:6be670be8b35 61 qEle* pop(pQueue *xP) {
manujose 0:6be670be8b35 62 qEle *p = xP->head;
manujose 0:6be670be8b35 63 xP->head = p->next;
manujose 0:6be670be8b35 64 xP->numEle--;
manujose 0:6be670be8b35 65 return p;
manujose 0:6be670be8b35 66 // free(p);
manujose 0:6be670be8b35 67 }
manujose 0:6be670be8b35 68
manujose 0:6be670be8b35 69 #endif