Shared event example. Instead of creating special thread user can use shared event queue and dispatch the global event queue from main thread.

Fork of Shared_Events_1 by mbed_example

Committer:
deepikabhavnani
Date:
Mon Dec 18 16:50:19 2017 +0000
Revision:
0:7c7d5b625e59
Child:
1:154179bdc39d
Shared event example: deferring from interrupt context

Who changed what in which revision?

UserRevisionLine numberNew contents of line
deepikabhavnani 0:7c7d5b625e59 1 #include "mbed.h"
deepikabhavnani 0:7c7d5b625e59 2 #include "mbed_events.h"
deepikabhavnani 0:7c7d5b625e59 3
deepikabhavnani 0:7c7d5b625e59 4 DigitalOut led1(LED1);
deepikabhavnani 0:7c7d5b625e59 5 InterruptIn sw(SW2);
deepikabhavnani 0:7c7d5b625e59 6
deepikabhavnani 0:7c7d5b625e59 7 void rise_handler(void) {
deepikabhavnani 0:7c7d5b625e59 8 // Toggle LED
deepikabhavnani 0:7c7d5b625e59 9 led1 = !led1;
deepikabhavnani 0:7c7d5b625e59 10 }
deepikabhavnani 0:7c7d5b625e59 11
deepikabhavnani 0:7c7d5b625e59 12 void fall_handler(void) {
deepikabhavnani 0:7c7d5b625e59 13 printf("fall_handler in context %p\r\n", Thread::gettid());
deepikabhavnani 0:7c7d5b625e59 14 // Toggle LED
deepikabhavnani 0:7c7d5b625e59 15 led1 = !led1;
deepikabhavnani 0:7c7d5b625e59 16 }
deepikabhavnani 0:7c7d5b625e59 17
deepikabhavnani 0:7c7d5b625e59 18 int main() {
deepikabhavnani 0:7c7d5b625e59 19 // Request the shared queue
deepikabhavnani 0:7c7d5b625e59 20 EventQueue *queue = mbed_event_queue();
deepikabhavnani 0:7c7d5b625e59 21 printf("Starting in context %p\r\n", Thread::gettid());
deepikabhavnani 0:7c7d5b625e59 22 // The 'rise' handler will execute in IRQ context
deepikabhavnani 0:7c7d5b625e59 23 sw.rise(rise_handler);
deepikabhavnani 0:7c7d5b625e59 24 // The 'fall' handler will execute in the context of the shared queue thread
deepikabhavnani 0:7c7d5b625e59 25 sw.fall(queue->event(fall_handler));
deepikabhavnani 0:7c7d5b625e59 26 }