Gopal Nair
/
frdm_rtos_serial
new
Diff: main.cpp
- Revision:
- 0:2d65e3de0b15
diff -r 000000000000 -r 2d65e3de0b15 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jul 06 17:15:03 2017 +0000 @@ -0,0 +1,69 @@ +#include "mbed.h" +#include "rtos.h" + + +DigitalOut led1(LED1); +DigitalOut led2(LED2); + +InterruptIn sw2(PTD4); +uint32_t button_pressed; +RawSerial pc(USBTX,USBRX); + +Thread *thread2; +Thread *thread3; + +char ch; +void sw2_press(void) +{ + thread2->signal_set(0x1); +} + +void RX_callback() { + // Note: you need to actually read from the serial to clear the RX interrupt + while(pc.readable()) + { + ch=pc.getc(); + } + led2 = !led2; + thread3->signal_set(0x1); +} +void led_thread(void const *argument) +{ + while (true) { + led1 = !led1; + Thread::wait(1000); + } +} + +void button_thread(void const *argument) +{ + while (true) { + Thread::signal_wait(0x1); + button_pressed++; + } +} + +void Serial_thread(void const *argument) +{ + while (true) { + Thread::signal_wait(0x1); + pc.putc(ch); + } +} + +int main() +{ + Thread thread(led_thread); + thread2 = new Thread(button_thread); + thread3 = new Thread(Serial_thread); + + button_pressed = 0; + sw2.fall(&sw2_press); + pc.attach(&RX_callback,Serial::RxIrq); + while (true) { + Thread::wait(5000); + //pc.printf("SW2 was pressed (last 5 seconds): %d \n", button_pressed); + //fflush(stdout); + button_pressed = 0; + } +}