nikos chalikias / Mbed 2 deprecated mbos_test

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001  // 2011.05.05 NX
00002  // This a test of [Andrew L] mbos
00003  // main.c copied from  mbos.h comments
00004  // ** A 3d task added **
00005  
00006  
00007  //* A typical simple example with two tasks, and one timer, might look like this:
00008  //* @code
00009  // mbos Blinky demonstration.
00010  // Task 1 toggles LED1 every second, under control of a timer. It then posts an event to
00011  // task 2 which flashed LED2 briefly.
00012   #include "mbed.h"                    
00013   #include "mbos.h"
00014  
00015   #define TASK1_ID                1       // Id for task 1 (idle task is 0)
00016   #define TASK1_PRIO              50      // priority for task 1
00017   #define TASK1_STACK_SZ          32      // stack size for task 1 in words 
00018   
00019   #define TASK2_ID                2       // Id for task 2 
00020   #define TASK2_PRIO              60      // priority for task 2
00021   #define TASK2_STACK_SZ          32      // stack size for task 2 in words 
00022   
00023   #define TASK3_ID                3       // Id for task 3 
00024   #define TASK3_PRIO              70      // priority for task 3
00025   #define TASK3_STACK_SZ          32      // stack size for task 2 in words 
00026   
00027   #define TIMER0_ID               0       // Id for timer 0
00028   #define TIMER0_PERIOD           1000    // Time period in milliseconds
00029   #define TIMER0_EVENT            1       // Event flag (1 << 0)
00030   
00031   #define T1_TO_T2_EVENT          2       // Event flag (1 << 1)
00032   #define T2_TO_T3_EVENT          2       // Event flag (1 << 1)
00033  
00034   void task1(void);                       // task function prototypes
00035   void task2(void);
00036   void task3(void);
00037 
00038   DigitalOut led1(LED1);
00039   DigitalOut led2(LED2);
00040   DigitalOut led3(LED3);
00041   mbos os(3, 1);                          // Instantiate mbos with 3 tasks & 1 timer    
00042  
00043   int main(void)
00044   {
00045       // Configure tasks and timers
00046       os.CreateTask(TASK1_ID, TASK1_PRIO, TASK1_STACK_SZ, task1);
00047       os.CreateTask(TASK2_ID, TASK2_PRIO, TASK2_STACK_SZ, task2);
00048       
00049       os.CreateTask(TASK3_ID, TASK3_PRIO, TASK3_STACK_SZ, task3);
00050       
00051       os.CreateTimer(TIMER0_ID, TIMER0_EVENT, TASK1_ID);
00052       // Start mbos
00053       os.Start();
00054       // never  return!
00055   }
00056  
00057   void task1(void)
00058   {
00059       os.SetTimer(TIMER0_ID, TIMER0_PERIOD, TIMER0_PERIOD);
00060       while(1){
00061           os.WaitEvent(TIMER0_EVENT);
00062           led1 = !led1;
00063           os.SetEvent(T1_TO_T2_EVENT, TASK2_ID);
00064       }
00065   }
00066  
00067   void task2(void)
00068   {
00069       while(1){
00070           os.WaitEvent(T1_TO_T2_EVENT);
00071           led2 = 1;
00072           wait_ms(100);
00073           led2 = 0;
00074           os.SetEvent(T2_TO_T3_EVENT, TASK3_ID);
00075       }
00076   }
00077 
00078   void task3(void)
00079   {
00080       while(1){
00081           os.WaitEvent(T2_TO_T3_EVENT);
00082           led3 = 1;
00083           wait_ms(100);
00084           led3 = 0;
00085       }
00086   }