Felipe Neves
/
TEN_mbedos_events
TEN MBED OS Course events lab
main.cpp
- Committer:
- uLipe
- Date:
- 2017-01-29
- Revision:
- 0:4303da3c75bf
File content as of revision 0:4303da3c75bf:
/** * @brief first event control program with MBED OS */ #include "mbed.h" #include "rtos.h" #include "mbed_events.h" /* declares threads for this demo: */ const size_t a_stk_size = 1024; uint8_t a_stk[a_stk_size]; Thread a_thread(osPriorityNormal, a_stk_size, &a_stk[0]); /* thread b is used as event loop thread*/ Thread b_thread; /* queue used to handle events */ EventQueue ev_queue(32 * EVENTS_EVENT_SIZE); /* reserve the debbuger uart to shell interface */ Serial pc_serial(USBTX,USBRX); /* allocate HW for button with interrupt */ InterruptIn sw(SW2); /** * @brief thread a function */ static void thread_a(void) { int pressed = 0; for(;;) { /* halt thread until a signal is received */ a_thread.signal_wait(1, osWaitForever); pressed++; pc_serial.printf("## button press woke up this thread, noof presses: %d !##\n\r", pressed); pc_serial.printf("## now this thread will wait for a new press !##\n\r"); } } /** * @brief event callback called from thread context */ static void button_callback(void) { /* button callback is used to assert a signal, * this is the advantage of event loop, signals are not allowed * to use in ISR, but this callback is executed from thread * context */ a_thread.signal_set(1); } /** * @brief main application loop */ int main(void) { pc_serial.baud(115200); a_thread.start(thread_a); b_thread.start(callback(&ev_queue, &EventQueue::dispatch_forever)); sw.rise(ev_queue.event(button_callback)); return 0; }