Pont Architecture Time Triggered OS

Dependencies:   mbed ITG3200

Committer:
Lachrymosa
Date:
Thu Oct 27 22:01:30 2011 +0000
Revision:
0:823a9a4db739
Incomplete Time Triggered OS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Lachrymosa 0:823a9a4db739 1 #include "mbed.h"
Lachrymosa 0:823a9a4db739 2 #include "Constants.h"
Lachrymosa 0:823a9a4db739 3 #include "OS.h"
Lachrymosa 0:823a9a4db739 4 extern Serial debug;
Lachrymosa 0:823a9a4db739 5
Lachrymosa 0:823a9a4db739 6 pTask TaskList[NumTask];
Lachrymosa 0:823a9a4db739 7
Lachrymosa 0:823a9a4db739 8 int SCHAddTask(void(*fP)(void), int P, int D)
Lachrymosa 0:823a9a4db739 9 {
Lachrymosa 0:823a9a4db739 10 int i = 0;
Lachrymosa 0:823a9a4db739 11 while(i <= NumTask && TaskList[i].fP != 0)
Lachrymosa 0:823a9a4db739 12 {
Lachrymosa 0:823a9a4db739 13 i++;
Lachrymosa 0:823a9a4db739 14 }
Lachrymosa 0:823a9a4db739 15 if (i > NumTask)
Lachrymosa 0:823a9a4db739 16 {
Lachrymosa 0:823a9a4db739 17 return ArrayFull;
Lachrymosa 0:823a9a4db739 18 }
Lachrymosa 0:823a9a4db739 19 TaskList[i].fP = fP;
Lachrymosa 0:823a9a4db739 20 TaskList[i].Delay = D;
Lachrymosa 0:823a9a4db739 21 TaskList[i].Period = P;
Lachrymosa 0:823a9a4db739 22 TaskList[i].RunMe = 0;
Lachrymosa 0:823a9a4db739 23
Lachrymosa 0:823a9a4db739 24 return i;
Lachrymosa 0:823a9a4db739 25 }
Lachrymosa 0:823a9a4db739 26
Lachrymosa 0:823a9a4db739 27 int SCHRemoveTask(int i)
Lachrymosa 0:823a9a4db739 28 {
Lachrymosa 0:823a9a4db739 29 if (TaskList[i].fP == 0)
Lachrymosa 0:823a9a4db739 30 {
Lachrymosa 0:823a9a4db739 31 return NothingFound;
Lachrymosa 0:823a9a4db739 32 }
Lachrymosa 0:823a9a4db739 33 TaskList[i].fP = 0;
Lachrymosa 0:823a9a4db739 34 TaskList[i].Delay = 0;
Lachrymosa 0:823a9a4db739 35 TaskList[i].Period = 0;
Lachrymosa 0:823a9a4db739 36 TaskList[i].RunMe = 0;
Lachrymosa 0:823a9a4db739 37 return i;
Lachrymosa 0:823a9a4db739 38 }
Lachrymosa 0:823a9a4db739 39
Lachrymosa 0:823a9a4db739 40 void SCHDispatch()
Lachrymosa 0:823a9a4db739 41 {
Lachrymosa 0:823a9a4db739 42 debug.printf("Entered Dispatch");
Lachrymosa 0:823a9a4db739 43 int i = 0;
Lachrymosa 0:823a9a4db739 44 for (i = 0; i <NumTask; i++)
Lachrymosa 0:823a9a4db739 45 {
Lachrymosa 0:823a9a4db739 46 if (TaskList[i].RunMe > 0)
Lachrymosa 0:823a9a4db739 47 {
Lachrymosa 0:823a9a4db739 48 TaskList[i].fP();
Lachrymosa 0:823a9a4db739 49 TaskList[i].RunMe--;
Lachrymosa 0:823a9a4db739 50 }
Lachrymosa 0:823a9a4db739 51 }
Lachrymosa 0:823a9a4db739 52 }
Lachrymosa 0:823a9a4db739 53
Lachrymosa 0:823a9a4db739 54 void SCHUpdate()
Lachrymosa 0:823a9a4db739 55 {
Lachrymosa 0:823a9a4db739 56 debug.printf("Interrupted \n \r");
Lachrymosa 0:823a9a4db739 57 int i = 0;
Lachrymosa 0:823a9a4db739 58 for (i = 0; i < NumTask; i++) //run through the whole tasklist array.
Lachrymosa 0:823a9a4db739 59 {
Lachrymosa 0:823a9a4db739 60 TaskList[i].Delay--;
Lachrymosa 0:823a9a4db739 61 if (TaskList[i].Delay <=0)
Lachrymosa 0:823a9a4db739 62 {
Lachrymosa 0:823a9a4db739 63 TaskList[i].RunMe++; //Add 1 to runme per timeout.
Lachrymosa 0:823a9a4db739 64 TaskList[i].Delay = TaskList[i].Period; //reset the timeout to the period.
Lachrymosa 0:823a9a4db739 65 }
Lachrymosa 0:823a9a4db739 66 }
Lachrymosa 0:823a9a4db739 67 }