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.
main.cpp@0:7c7d5b625e59, 2017-12-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |