Shared event example. Instead of creating special thread user can use shared event queue i.e. sharing it with other system components and saving RAM. As the event queue is shared, you should limit the execution time of your event functions to avoid delaying other users’ events excessively.

Committer:
deepikabhavnani
Date:
Mon Dec 18 16:50:19 2017 +0000
Revision:
0:7c7d5b625e59
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 }