![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Pont Architecture Time Triggered OS
OS.c@0:823a9a4db739, 2011-10-27 (annotated)
- Committer:
- Lachrymosa
- Date:
- Thu Oct 27 22:01:30 2011 +0000
- Revision:
- 0:823a9a4db739
Incomplete Time Triggered OS
Who changed what in which revision?
User | Revision | Line number | New 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 | } |