nikos chalikias
/
mbos_test
Testing [Andrew L] mbos RTOS for mbed Simply by copying code for main.cpp from mbos.h-comments
main.cpp@0:a61d29450691, 2011-05-05 (annotated)
- Committer:
- chalikias
- Date:
- Thu May 05 07:34:12 2011 +0000
- Revision:
- 0:a61d29450691
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
chalikias | 0:a61d29450691 | 1 | // 2011.05.05 NX |
chalikias | 0:a61d29450691 | 2 | // This a test of [Andrew L] mbos |
chalikias | 0:a61d29450691 | 3 | // main.c copied from mbos.h comments |
chalikias | 0:a61d29450691 | 4 | // ** A 3d task added ** |
chalikias | 0:a61d29450691 | 5 | |
chalikias | 0:a61d29450691 | 6 | |
chalikias | 0:a61d29450691 | 7 | //* A typical simple example with two tasks, and one timer, might look like this: |
chalikias | 0:a61d29450691 | 8 | //* @code |
chalikias | 0:a61d29450691 | 9 | // mbos Blinky demonstration. |
chalikias | 0:a61d29450691 | 10 | // Task 1 toggles LED1 every second, under control of a timer. It then posts an event to |
chalikias | 0:a61d29450691 | 11 | // task 2 which flashed LED2 briefly. |
chalikias | 0:a61d29450691 | 12 | #include "mbed.h" |
chalikias | 0:a61d29450691 | 13 | #include "mbos.h" |
chalikias | 0:a61d29450691 | 14 | |
chalikias | 0:a61d29450691 | 15 | #define TASK1_ID 1 // Id for task 1 (idle task is 0) |
chalikias | 0:a61d29450691 | 16 | #define TASK1_PRIO 50 // priority for task 1 |
chalikias | 0:a61d29450691 | 17 | #define TASK1_STACK_SZ 32 // stack size for task 1 in words |
chalikias | 0:a61d29450691 | 18 | |
chalikias | 0:a61d29450691 | 19 | #define TASK2_ID 2 // Id for task 2 |
chalikias | 0:a61d29450691 | 20 | #define TASK2_PRIO 60 // priority for task 2 |
chalikias | 0:a61d29450691 | 21 | #define TASK2_STACK_SZ 32 // stack size for task 2 in words |
chalikias | 0:a61d29450691 | 22 | |
chalikias | 0:a61d29450691 | 23 | #define TASK3_ID 3 // Id for task 3 |
chalikias | 0:a61d29450691 | 24 | #define TASK3_PRIO 70 // priority for task 3 |
chalikias | 0:a61d29450691 | 25 | #define TASK3_STACK_SZ 32 // stack size for task 2 in words |
chalikias | 0:a61d29450691 | 26 | |
chalikias | 0:a61d29450691 | 27 | #define TIMER0_ID 0 // Id for timer 0 |
chalikias | 0:a61d29450691 | 28 | #define TIMER0_PERIOD 1000 // Time period in milliseconds |
chalikias | 0:a61d29450691 | 29 | #define TIMER0_EVENT 1 // Event flag (1 << 0) |
chalikias | 0:a61d29450691 | 30 | |
chalikias | 0:a61d29450691 | 31 | #define T1_TO_T2_EVENT 2 // Event flag (1 << 1) |
chalikias | 0:a61d29450691 | 32 | #define T2_TO_T3_EVENT 2 // Event flag (1 << 1) |
chalikias | 0:a61d29450691 | 33 | |
chalikias | 0:a61d29450691 | 34 | void task1(void); // task function prototypes |
chalikias | 0:a61d29450691 | 35 | void task2(void); |
chalikias | 0:a61d29450691 | 36 | void task3(void); |
chalikias | 0:a61d29450691 | 37 | |
chalikias | 0:a61d29450691 | 38 | DigitalOut led1(LED1); |
chalikias | 0:a61d29450691 | 39 | DigitalOut led2(LED2); |
chalikias | 0:a61d29450691 | 40 | DigitalOut led3(LED3); |
chalikias | 0:a61d29450691 | 41 | mbos os(3, 1); // Instantiate mbos with 3 tasks & 1 timer |
chalikias | 0:a61d29450691 | 42 | |
chalikias | 0:a61d29450691 | 43 | int main(void) |
chalikias | 0:a61d29450691 | 44 | { |
chalikias | 0:a61d29450691 | 45 | // Configure tasks and timers |
chalikias | 0:a61d29450691 | 46 | os.CreateTask(TASK1_ID, TASK1_PRIO, TASK1_STACK_SZ, task1); |
chalikias | 0:a61d29450691 | 47 | os.CreateTask(TASK2_ID, TASK2_PRIO, TASK2_STACK_SZ, task2); |
chalikias | 0:a61d29450691 | 48 | |
chalikias | 0:a61d29450691 | 49 | os.CreateTask(TASK3_ID, TASK3_PRIO, TASK3_STACK_SZ, task3); |
chalikias | 0:a61d29450691 | 50 | |
chalikias | 0:a61d29450691 | 51 | os.CreateTimer(TIMER0_ID, TIMER0_EVENT, TASK1_ID); |
chalikias | 0:a61d29450691 | 52 | // Start mbos |
chalikias | 0:a61d29450691 | 53 | os.Start(); |
chalikias | 0:a61d29450691 | 54 | // never return! |
chalikias | 0:a61d29450691 | 55 | } |
chalikias | 0:a61d29450691 | 56 | |
chalikias | 0:a61d29450691 | 57 | void task1(void) |
chalikias | 0:a61d29450691 | 58 | { |
chalikias | 0:a61d29450691 | 59 | os.SetTimer(TIMER0_ID, TIMER0_PERIOD, TIMER0_PERIOD); |
chalikias | 0:a61d29450691 | 60 | while(1){ |
chalikias | 0:a61d29450691 | 61 | os.WaitEvent(TIMER0_EVENT); |
chalikias | 0:a61d29450691 | 62 | led1 = !led1; |
chalikias | 0:a61d29450691 | 63 | os.SetEvent(T1_TO_T2_EVENT, TASK2_ID); |
chalikias | 0:a61d29450691 | 64 | } |
chalikias | 0:a61d29450691 | 65 | } |
chalikias | 0:a61d29450691 | 66 | |
chalikias | 0:a61d29450691 | 67 | void task2(void) |
chalikias | 0:a61d29450691 | 68 | { |
chalikias | 0:a61d29450691 | 69 | while(1){ |
chalikias | 0:a61d29450691 | 70 | os.WaitEvent(T1_TO_T2_EVENT); |
chalikias | 0:a61d29450691 | 71 | led2 = 1; |
chalikias | 0:a61d29450691 | 72 | wait_ms(100); |
chalikias | 0:a61d29450691 | 73 | led2 = 0; |
chalikias | 0:a61d29450691 | 74 | os.SetEvent(T2_TO_T3_EVENT, TASK3_ID); |
chalikias | 0:a61d29450691 | 75 | } |
chalikias | 0:a61d29450691 | 76 | } |
chalikias | 0:a61d29450691 | 77 | |
chalikias | 0:a61d29450691 | 78 | void task3(void) |
chalikias | 0:a61d29450691 | 79 | { |
chalikias | 0:a61d29450691 | 80 | while(1){ |
chalikias | 0:a61d29450691 | 81 | os.WaitEvent(T2_TO_T3_EVENT); |
chalikias | 0:a61d29450691 | 82 | led3 = 1; |
chalikias | 0:a61d29450691 | 83 | wait_ms(100); |
chalikias | 0:a61d29450691 | 84 | led3 = 0; |
chalikias | 0:a61d29450691 | 85 | } |
chalikias | 0:a61d29450691 | 86 | } |