A Small Cooperative Multitasking Kernel

Dependencies:   mbed

Committer:
Ivop
Date:
Sun Jul 24 17:15:42 2011 +0000
Revision:
0:73b89fc74e9f
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ivop 0:73b89fc74e9f 1 #include "kernel.h"
Ivop 0:73b89fc74e9f 2 #include <mbed.h>
Ivop 0:73b89fc74e9f 3
Ivop 0:73b89fc74e9f 4 static void task_zero(void);
Ivop 0:73b89fc74e9f 5 static void task_one(void);
Ivop 0:73b89fc74e9f 6 static void task_two(void);
Ivop 0:73b89fc74e9f 7 static void task_three(void);
Ivop 0:73b89fc74e9f 8
Ivop 0:73b89fc74e9f 9 struct ou_task ou_tasks[] = {
Ivop 0:73b89fc74e9f 10 { task_zero, 2, 0, 0, 0, NULL },
Ivop 0:73b89fc74e9f 11 { task_one, 1, 0, 0, 0, NULL },
Ivop 0:73b89fc74e9f 12 { task_two, 5, 0, 0, 0, NULL },
Ivop 0:73b89fc74e9f 13 { task_three, 5, 0, 0, 0, NULL }
Ivop 0:73b89fc74e9f 14 };
Ivop 0:73b89fc74e9f 15
Ivop 0:73b89fc74e9f 16 const unsigned ou_ntasks = sizeof(ou_tasks)/sizeof(struct ou_task);
Ivop 0:73b89fc74e9f 17
Ivop 0:73b89fc74e9f 18
Ivop 0:73b89fc74e9f 19 OU_TASK(task_zero)
Ivop 0:73b89fc74e9f 20 static DigitalOut led(LED1);
Ivop 0:73b89fc74e9f 21
Ivop 0:73b89fc74e9f 22 OU_WAIT(100);
Ivop 0:73b89fc74e9f 23 led = 1;
Ivop 0:73b89fc74e9f 24 OU_WAIT(100);
Ivop 0:73b89fc74e9f 25 led = 0;
Ivop 0:73b89fc74e9f 26 OU_ENDTASK
Ivop 0:73b89fc74e9f 27
Ivop 0:73b89fc74e9f 28 OU_TASK(task_one)
Ivop 0:73b89fc74e9f 29 static DigitalOut led(LED2);
Ivop 0:73b89fc74e9f 30
Ivop 0:73b89fc74e9f 31 OU_WAIT(100);
Ivop 0:73b89fc74e9f 32 led = 1;
Ivop 0:73b89fc74e9f 33 OU_WAIT(100);
Ivop 0:73b89fc74e9f 34 led = 0;
Ivop 0:73b89fc74e9f 35 OU_WAIT(100);
Ivop 0:73b89fc74e9f 36 led = 1;
Ivop 0:73b89fc74e9f 37 for(;;) {
Ivop 0:73b89fc74e9f 38 OU_WAIT(50);
Ivop 0:73b89fc74e9f 39 led = 0;
Ivop 0:73b89fc74e9f 40 OU_WAIT(50);
Ivop 0:73b89fc74e9f 41 led = 1;
Ivop 0:73b89fc74e9f 42 }
Ivop 0:73b89fc74e9f 43 OU_ENDTASK
Ivop 0:73b89fc74e9f 44
Ivop 0:73b89fc74e9f 45 OU_TASK(task_two)
Ivop 0:73b89fc74e9f 46 static DigitalOut led(LED3);
Ivop 0:73b89fc74e9f 47 for(;;) {
Ivop 0:73b89fc74e9f 48 OU_WAIT(100);
Ivop 0:73b89fc74e9f 49 led = !led;
Ivop 0:73b89fc74e9f 50 }
Ivop 0:73b89fc74e9f 51 OU_ENDTASK
Ivop 0:73b89fc74e9f 52
Ivop 0:73b89fc74e9f 53 OU_TASK(task_three)
Ivop 0:73b89fc74e9f 54 static DigitalOut led(LED4);
Ivop 0:73b89fc74e9f 55 for(;;) {
Ivop 0:73b89fc74e9f 56 OU_WAIT(20);
Ivop 0:73b89fc74e9f 57 led = !led;
Ivop 0:73b89fc74e9f 58 }
Ivop 0:73b89fc74e9f 59 OU_ENDTASK