one hour slave program this waits for entry from master and initialize queue in the begninng and execute the data.
pqueue.h@0:6be670be8b35, 2010-12-04 (annotated)
- Committer:
- manujose
- Date:
- Sat Dec 04 06:09:47 2010 +0000
- Revision:
- 0:6be670be8b35
Who changed what in which revision?
User | Revision | Line number | New 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 |