Testing [Andrew L] mbos RTOS for mbed Simply by copying code for main.cpp from mbos.h-comments
main.cpp
- Committer:
- chalikias
- Date:
- 2011-05-05
- Revision:
- 0:a61d29450691
File content as of revision 0:a61d29450691:
// 2011.05.05 NX
// This a test of [Andrew L] mbos
// main.c copied from mbos.h comments
// ** A 3d task added **
//* A typical simple example with two tasks, and one timer, might look like this:
//* @code
// mbos Blinky demonstration.
// Task 1 toggles LED1 every second, under control of a timer. It then posts an event to
// task 2 which flashed LED2 briefly.
#include "mbed.h"
#include "mbos.h"
#define TASK1_ID 1 // Id for task 1 (idle task is 0)
#define TASK1_PRIO 50 // priority for task 1
#define TASK1_STACK_SZ 32 // stack size for task 1 in words
#define TASK2_ID 2 // Id for task 2
#define TASK2_PRIO 60 // priority for task 2
#define TASK2_STACK_SZ 32 // stack size for task 2 in words
#define TASK3_ID 3 // Id for task 3
#define TASK3_PRIO 70 // priority for task 3
#define TASK3_STACK_SZ 32 // stack size for task 2 in words
#define TIMER0_ID 0 // Id for timer 0
#define TIMER0_PERIOD 1000 // Time period in milliseconds
#define TIMER0_EVENT 1 // Event flag (1 << 0)
#define T1_TO_T2_EVENT 2 // Event flag (1 << 1)
#define T2_TO_T3_EVENT 2 // Event flag (1 << 1)
void task1(void); // task function prototypes
void task2(void);
void task3(void);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
mbos os(3, 1); // Instantiate mbos with 3 tasks & 1 timer
int main(void)
{
// Configure tasks and timers
os.CreateTask(TASK1_ID, TASK1_PRIO, TASK1_STACK_SZ, task1);
os.CreateTask(TASK2_ID, TASK2_PRIO, TASK2_STACK_SZ, task2);
os.CreateTask(TASK3_ID, TASK3_PRIO, TASK3_STACK_SZ, task3);
os.CreateTimer(TIMER0_ID, TIMER0_EVENT, TASK1_ID);
// Start mbos
os.Start();
// never return!
}
void task1(void)
{
os.SetTimer(TIMER0_ID, TIMER0_PERIOD, TIMER0_PERIOD);
while(1){
os.WaitEvent(TIMER0_EVENT);
led1 = !led1;
os.SetEvent(T1_TO_T2_EVENT, TASK2_ID);
}
}
void task2(void)
{
while(1){
os.WaitEvent(T1_TO_T2_EVENT);
led2 = 1;
wait_ms(100);
led2 = 0;
os.SetEvent(T2_TO_T3_EVENT, TASK3_ID);
}
}
void task3(void)
{
while(1){
os.WaitEvent(T2_TO_T3_EVENT);
led3 = 1;
wait_ms(100);
led3 = 0;
}
}