a simple c coroutine for mbed paltform

Dependencies:   mbed

Committer:
mintisan
Date:
Sun Mar 06 07:22:27 2016 +0000
Revision:
0:0177715f0996
initial c coroutine for mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mintisan 0:0177715f0996 1 #include "mbed.h"
mintisan 0:0177715f0996 2 #include "coroutine.h"
mintisan 0:0177715f0996 3
mintisan 0:0177715f0996 4 volatile uint16_t cr_time1;
mintisan 0:0177715f0996 5 volatile uint16_t cr_time2;
mintisan 0:0177715f0996 6
mintisan 0:0177715f0996 7 void user_thread1(void);
mintisan 0:0177715f0996 8 void user_thread2(void);
mintisan 0:0177715f0996 9
mintisan 0:0177715f0996 10 Ticker toggle_led_ticker;
mintisan 0:0177715f0996 11 DigitalOut led1(LED1);
mintisan 0:0177715f0996 12 DigitalOut led2(LED2);
mintisan 0:0177715f0996 13
mintisan 0:0177715f0996 14 void isr_ticker() {
mintisan 0:0177715f0996 15 cr_time1++;
mintisan 0:0177715f0996 16 cr_time2++;
mintisan 0:0177715f0996 17 }
mintisan 0:0177715f0996 18
mintisan 0:0177715f0996 19
mintisan 0:0177715f0996 20
mintisan 0:0177715f0996 21 int main(void) {
mintisan 0:0177715f0996 22 // Init the ticker with the address of the function (isr_ticker) to be attached and the interval (1 ms)
mintisan 0:0177715f0996 23 toggle_led_ticker.attach(&isr_ticker, 0.001);
mintisan 0:0177715f0996 24 while (true) {
mintisan 0:0177715f0996 25 // Do other things...
mintisan 0:0177715f0996 26 user_thread1();
mintisan 0:0177715f0996 27 user_thread2();
mintisan 0:0177715f0996 28 }
mintisan 0:0177715f0996 29 }
mintisan 0:0177715f0996 30
mintisan 0:0177715f0996 31 void user_thread1(void)
mintisan 0:0177715f0996 32 {
mintisan 0:0177715f0996 33 cr_start();
mintisan 0:0177715f0996 34
mintisan 0:0177715f0996 35 // inital once each loop
mintisan 0:0177715f0996 36 cr_time1 = 0;
mintisan 0:0177715f0996 37 // waiting for condition is satisfied, or will be yield
mintisan 0:0177715f0996 38 cr_yield(cr_time1 != 1000);
mintisan 0:0177715f0996 39 led1 = !led1;
mintisan 0:0177715f0996 40
mintisan 0:0177715f0996 41 cr_end();
mintisan 0:0177715f0996 42 }
mintisan 0:0177715f0996 43
mintisan 0:0177715f0996 44 void user_thread2(void)
mintisan 0:0177715f0996 45 {
mintisan 0:0177715f0996 46 cr_start();
mintisan 0:0177715f0996 47
mintisan 0:0177715f0996 48 // inital once each loop
mintisan 0:0177715f0996 49 cr_time2 = 0;
mintisan 0:0177715f0996 50 // waiting for condition is satisfied, or will be yield
mintisan 0:0177715f0996 51 cr_yield(cr_time2 != 800);
mintisan 0:0177715f0996 52 led2 = !led2;
mintisan 0:0177715f0996 53
mintisan 0:0177715f0996 54 cr_end();
mintisan 0:0177715f0996 55 }