electronix79
/
CoOS_mbed
CooCox 1.1.4 on mbed with simple blinky example
main.cpp@0:7f6d87f66362, 2011-07-29 (annotated)
- Committer:
- electronix79
- Date:
- Fri Jul 29 03:01:03 2011 +0000
- Revision:
- 0:7f6d87f66362
CooCox 1.1.4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
electronix79 | 0:7f6d87f66362 | 1 | // CooCox RTOS v1.1.4 with simple example |
electronix79 | 0:7f6d87f66362 | 2 | // Two LEDs will blink with 250ms and 500ms interval based on two seperate tasks |
electronix79 | 0:7f6d87f66362 | 3 | // by electronix79, 29/July/2011 |
electronix79 | 0:7f6d87f66362 | 4 | // |
electronix79 | 0:7f6d87f66362 | 5 | // Comments: Nice work by Eric Ebert which used CooCox RTOS v1.1.3 but all files of CoOS were in one main folder, |
electronix79 | 0:7f6d87f66362 | 6 | // so I create new project with the same structure as in CooCox design and of cause I use the updated version 1.1.4 |
electronix79 | 0:7f6d87f66362 | 7 | |
electronix79 | 0:7f6d87f66362 | 8 | #include "mbed.h" |
electronix79 | 0:7f6d87f66362 | 9 | |
electronix79 | 0:7f6d87f66362 | 10 | #include <CoOS.h> |
electronix79 | 0:7f6d87f66362 | 11 | |
electronix79 | 0:7f6d87f66362 | 12 | DigitalOut led1(LED1), led4(LED4); |
electronix79 | 0:7f6d87f66362 | 13 | |
electronix79 | 0:7f6d87f66362 | 14 | #define TASK_STACK_SIZE 128 /*!< Define task size */ |
electronix79 | 0:7f6d87f66362 | 15 | |
electronix79 | 0:7f6d87f66362 | 16 | #define PRIORITY_TASK1 1 /* Priority of task 1 */ |
electronix79 | 0:7f6d87f66362 | 17 | #define PRIORITY_TASK2 2 /* Priority of task 2 */ |
electronix79 | 0:7f6d87f66362 | 18 | #define PRIORITY_TASK3 3 /* Priority of task 3 */ |
electronix79 | 0:7f6d87f66362 | 19 | |
electronix79 | 0:7f6d87f66362 | 20 | OS_STK task1_stk[TASK_STACK_SIZE]; /*!< Define "task1" task stack */ |
electronix79 | 0:7f6d87f66362 | 21 | OS_STK task2_stk[TASK_STACK_SIZE]; /*!< Define "task2" task stack */ |
electronix79 | 0:7f6d87f66362 | 22 | OS_STK task3_stk[TASK_STACK_SIZE]; /*!< Define "task3" task stack */ |
electronix79 | 0:7f6d87f66362 | 23 | |
electronix79 | 0:7f6d87f66362 | 24 | OS_TID task1_id; /*!< Task ID of 'task1'. */ |
electronix79 | 0:7f6d87f66362 | 25 | OS_TID task2_id; /*!< Task ID of 'task2'. */ |
electronix79 | 0:7f6d87f66362 | 26 | OS_TID task3_id; /*!< Task ID of 'task3'. */ |
electronix79 | 0:7f6d87f66362 | 27 | |
electronix79 | 0:7f6d87f66362 | 28 | OS_MutexID mut_1; /*!< Save id of mutex. */ |
electronix79 | 0:7f6d87f66362 | 29 | |
electronix79 | 0:7f6d87f66362 | 30 | void task1(void *); |
electronix79 | 0:7f6d87f66362 | 31 | void task2(void *); |
electronix79 | 0:7f6d87f66362 | 32 | void task3(void *); |
electronix79 | 0:7f6d87f66362 | 33 | |
electronix79 | 0:7f6d87f66362 | 34 | void task1(void* pdata) |
electronix79 | 0:7f6d87f66362 | 35 | { |
electronix79 | 0:7f6d87f66362 | 36 | mut_1 = CoCreateMutex(); /* Create a mutex */ |
electronix79 | 0:7f6d87f66362 | 37 | |
electronix79 | 0:7f6d87f66362 | 38 | task2_id = CoCreateTask(task2, (void *)0, PRIORITY_TASK2, &task2_stk[TASK_STACK_SIZE-1], TASK_STACK_SIZE); |
electronix79 | 0:7f6d87f66362 | 39 | task3_id = CoCreateTask(task3, (void *)0, PRIORITY_TASK3, &task3_stk[TASK_STACK_SIZE-1], TASK_STACK_SIZE); |
electronix79 | 0:7f6d87f66362 | 40 | |
electronix79 | 0:7f6d87f66362 | 41 | CoExitTask(); /* Delete 'task1' task. */ |
electronix79 | 0:7f6d87f66362 | 42 | } |
electronix79 | 0:7f6d87f66362 | 43 | |
electronix79 | 0:7f6d87f66362 | 44 | void task2(void* pdata) |
electronix79 | 0:7f6d87f66362 | 45 | { |
electronix79 | 0:7f6d87f66362 | 46 | for(;;) |
electronix79 | 0:7f6d87f66362 | 47 | { |
electronix79 | 0:7f6d87f66362 | 48 | CoEnterMutexSection(mut_1); /* Enter critical region */ |
electronix79 | 0:7f6d87f66362 | 49 | led1 = 1; /* Turn On Led */ |
electronix79 | 0:7f6d87f66362 | 50 | CoLeaveMutexSection(mut_1); /* Exit critical region */ |
electronix79 | 0:7f6d87f66362 | 51 | CoTickDelay(250); /* Delay 250ms */ |
electronix79 | 0:7f6d87f66362 | 52 | CoEnterMutexSection(mut_1); /* Enter critical region */ |
electronix79 | 0:7f6d87f66362 | 53 | led1 = 0; /* Turn Off Led */ |
electronix79 | 0:7f6d87f66362 | 54 | CoLeaveMutexSection(mut_1); /* Exit critical region */ |
electronix79 | 0:7f6d87f66362 | 55 | CoTickDelay(250); /* Delay 250ms */ |
electronix79 | 0:7f6d87f66362 | 56 | } |
electronix79 | 0:7f6d87f66362 | 57 | } |
electronix79 | 0:7f6d87f66362 | 58 | |
electronix79 | 0:7f6d87f66362 | 59 | void task3(void* pdata) |
electronix79 | 0:7f6d87f66362 | 60 | { |
electronix79 | 0:7f6d87f66362 | 61 | for(;;) |
electronix79 | 0:7f6d87f66362 | 62 | { |
electronix79 | 0:7f6d87f66362 | 63 | CoEnterMutexSection(mut_1); /* Enter critical region */ |
electronix79 | 0:7f6d87f66362 | 64 | led4 = 1; /* Turn On Led */ |
electronix79 | 0:7f6d87f66362 | 65 | CoLeaveMutexSection(mut_1); /* Exit critical region */ |
electronix79 | 0:7f6d87f66362 | 66 | CoTickDelay(500); /* Delay 500ms */ |
electronix79 | 0:7f6d87f66362 | 67 | CoEnterMutexSection(mut_1); /* Enter critical region */ |
electronix79 | 0:7f6d87f66362 | 68 | led4 = 0; /* Turn Off Led */ |
electronix79 | 0:7f6d87f66362 | 69 | CoLeaveMutexSection(mut_1); /* Exit critical region */ |
electronix79 | 0:7f6d87f66362 | 70 | CoTickDelay(500); /* Delay 500ms */ |
electronix79 | 0:7f6d87f66362 | 71 | } |
electronix79 | 0:7f6d87f66362 | 72 | } |
electronix79 | 0:7f6d87f66362 | 73 | |
electronix79 | 0:7f6d87f66362 | 74 | int main() |
electronix79 | 0:7f6d87f66362 | 75 | { |
electronix79 | 0:7f6d87f66362 | 76 | CoInitOS(); /*!< Initial CooCox CoOS */ |
electronix79 | 0:7f6d87f66362 | 77 | |
electronix79 | 0:7f6d87f66362 | 78 | task1_id = CoCreateTask(task1, (void *)0, PRIORITY_TASK1, &task1_stk[TASK_STACK_SIZE-1], TASK_STACK_SIZE); |
electronix79 | 0:7f6d87f66362 | 79 | |
electronix79 | 0:7f6d87f66362 | 80 | CoStartOS(); /*!< Start multitask */ |
electronix79 | 0:7f6d87f66362 | 81 | |
electronix79 | 0:7f6d87f66362 | 82 | while (1); /*!< The code don't reach here */ |
electronix79 | 0:7f6d87f66362 | 83 | } |