Ted Lin
/
Nucleo_ticker_coroutine
a simple c coroutine for mbed paltform
main.cpp@0:0177715f0996, 2016-03-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |