B.3 PROGRAM .SLAVE

Dependencies:   mbed

Committer:
manujose
Date:
Tue Dec 14 23:26:42 2010 +0000
Revision:
1:695db1757630
Parent:
0:9092ea8d9a6c

        

Who changed what in which revision?

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