CooCox 1.1.4 on mbed with simple blinky example

Dependencies:   mbed

Committer:
electronix79
Date:
Fri Jul 29 03:01:03 2011 +0000
Revision:
0:7f6d87f66362
CooCox 1.1.4

Who changed what in which revision?

UserRevisionLine numberNew 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 }