manu jose
/
6hrmaster
B.3 : THE 6 HOUR PROGRAM WITH 1 PPS SIGNAL THE MASTER TO BE CONNECTED TO 11 PIN.
pqueue.h@0:e6964ff1bbcc, 2010-12-04 (annotated)
- Committer:
- manujose
- Date:
- Sat Dec 04 05:09:15 2010 +0000
- Revision:
- 0:e6964ff1bbcc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manujose | 0:e6964ff1bbcc | 1 | #ifndef _PQUEUE_H_ |
manujose | 0:e6964ff1bbcc | 2 | #define _PQUEUE_H_ |
manujose | 0:e6964ff1bbcc | 3 | |
manujose | 0:e6964ff1bbcc | 4 | typedef struct prioQueueEle { |
manujose | 0:e6964ff1bbcc | 5 | timeval t; |
manujose | 0:e6964ff1bbcc | 6 | void (*foo)(void); |
manujose | 0:e6964ff1bbcc | 7 | int sched; |
manujose | 0:e6964ff1bbcc | 8 | struct prioQueueEle *next; |
manujose | 0:e6964ff1bbcc | 9 | }qEle; |
manujose | 0:e6964ff1bbcc | 10 | typedef struct prioQueue { |
manujose | 0:e6964ff1bbcc | 11 | int numEle; |
manujose | 0:e6964ff1bbcc | 12 | qEle *head; |
manujose | 0:e6964ff1bbcc | 13 | |
manujose | 0:e6964ff1bbcc | 14 | }pQueue; |
manujose | 0:e6964ff1bbcc | 15 | |
manujose | 0:e6964ff1bbcc | 16 | |
manujose | 0:e6964ff1bbcc | 17 | |
manujose | 0:e6964ff1bbcc | 18 | int enqueue(pQueue *xP, timeval t, void (*schedFunc)(void)) { |
manujose | 0:e6964ff1bbcc | 19 | if (xP->numEle == QUEUE_MAX) |
manujose | 0:e6964ff1bbcc | 20 | return 0; //ERROR reached max . |
manujose | 0:e6964ff1bbcc | 21 | |
manujose | 0:e6964ff1bbcc | 22 | xP->numEle++; |
manujose | 0:e6964ff1bbcc | 23 | qEle *newEle = (qEle*)malloc(sizeof(qEle)); |
manujose | 0:e6964ff1bbcc | 24 | newEle->t.tv_sec = t.tv_sec; |
manujose | 0:e6964ff1bbcc | 25 | newEle->t.tv_usec = t.tv_usec; |
manujose | 0:e6964ff1bbcc | 26 | newEle->foo = schedFunc; |
manujose | 0:e6964ff1bbcc | 27 | newEle->sched = 0; |
manujose | 0:e6964ff1bbcc | 28 | newEle->next = NULL; |
manujose | 0:e6964ff1bbcc | 29 | if (xP->head == NULL) { //first ele; |
manujose | 0:e6964ff1bbcc | 30 | xP->head = newEle; |
manujose | 0:e6964ff1bbcc | 31 | return 1; |
manujose | 0:e6964ff1bbcc | 32 | } else { |
manujose | 0:e6964ff1bbcc | 33 | if ((xP->head->t.tv_sec > t.tv_sec) || |
manujose | 0:e6964ff1bbcc | 34 | ((xP->head->t.tv_sec == t.tv_sec ) && (xP->head->t.tv_usec > t.tv_usec)) ) { |
manujose | 0:e6964ff1bbcc | 35 | newEle->next = xP->head; |
manujose | 0:e6964ff1bbcc | 36 | xP->head = newEle; |
manujose | 0:e6964ff1bbcc | 37 | |
manujose | 0:e6964ff1bbcc | 38 | return 1; |
manujose | 0:e6964ff1bbcc | 39 | } else if (xP->head->next == NULL) { |
manujose | 0:e6964ff1bbcc | 40 | xP->head->next = newEle; |
manujose | 0:e6964ff1bbcc | 41 | return 1; |
manujose | 0:e6964ff1bbcc | 42 | } |
manujose | 0:e6964ff1bbcc | 43 | } |
manujose | 0:e6964ff1bbcc | 44 | qEle *e = xP->head; |
manujose | 0:e6964ff1bbcc | 45 | while (e->next->next !=NULL) { |
manujose | 0:e6964ff1bbcc | 46 | if ((e->next->t.tv_sec > t.tv_sec) || |
manujose | 0:e6964ff1bbcc | 47 | ((e->next->t.tv_sec == t.tv_sec) && (e->next->t.tv_usec > t.tv_usec)) ) { |
manujose | 0:e6964ff1bbcc | 48 | newEle->next = e->next; |
manujose | 0:e6964ff1bbcc | 49 | e->next = newEle; |
manujose | 0:e6964ff1bbcc | 50 | return 1; |
manujose | 0:e6964ff1bbcc | 51 | } |
manujose | 0:e6964ff1bbcc | 52 | e= e->next; |
manujose | 0:e6964ff1bbcc | 53 | } |
manujose | 0:e6964ff1bbcc | 54 | e->next->next = newEle; |
manujose | 0:e6964ff1bbcc | 55 | return 1; |
manujose | 0:e6964ff1bbcc | 56 | } |
manujose | 0:e6964ff1bbcc | 57 | |
manujose | 0:e6964ff1bbcc | 58 | |
manujose | 0:e6964ff1bbcc | 59 | |
manujose | 0:e6964ff1bbcc | 60 | |
manujose | 0:e6964ff1bbcc | 61 | qEle* pop(pQueue *xP) { |
manujose | 0:e6964ff1bbcc | 62 | qEle *p = xP->head; |
manujose | 0:e6964ff1bbcc | 63 | xP->head = p->next; |
manujose | 0:e6964ff1bbcc | 64 | xP->numEle--; |
manujose | 0:e6964ff1bbcc | 65 | return p; |
manujose | 0:e6964ff1bbcc | 66 | // free(p); |
manujose | 0:e6964ff1bbcc | 67 | } |
manujose | 0:e6964ff1bbcc | 68 | |
manujose | 0:e6964ff1bbcc | 69 | #endif |