UserAllocatedEvent class example to manually instantiate, configure and post events onto the static EventQueue.
main.cpp@1:8f277b2fb5ec, 2019-09-04 (annotated)
- Committer:
- macboc
- Date:
- Wed Sep 04 10:57:56 2019 +0200
- Revision:
- 1:8f277b2fb5ec
- Parent:
- 0:c7b889925ac6
update mbed revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 1 | #include "mbed.h" |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 2 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 3 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 4 | // Creates static event queue |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 5 | static EventQueue queue(0); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 6 | void handler(int count); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 7 | // Creates an event for later bound |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 8 | auto event1 = make_user_allocated_event(handler, 1); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 9 | auto event2 = make_user_allocated_event(handler, 2); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 10 | // Creates an event bound to the specified event queue |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 11 | auto event3 = queue.make_user_allocated_event(handler, 3); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 12 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 13 | void handler(int count) { |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 14 | printf("UserAllocatedEvent = %d \n\r", count); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 15 | return; |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 16 | } |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 17 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 18 | void post_events(void) |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 19 | { |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 20 | // Events can be posted multiple times and enqueue gracefully until |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 21 | // the dispatch function is called. |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 22 | event1.call_on(&queue); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 23 | event2.call_on(&queue); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 24 | event3.call(); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 25 | } |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 26 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 27 | int main() |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 28 | { |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 29 | Thread event_thread; |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 30 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 31 | // The event can be manually configured for special timing requirements |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 32 | // specified in milliseconds |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 33 | // Starting delay - 100 msec |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 34 | // Delay between each event - 200msec |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 35 | event1.delay(100); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 36 | event1.period(200); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 37 | event2.delay(100); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 38 | event2.period(200); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 39 | event3.delay(100); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 40 | event3.period(200); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 41 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 42 | event_thread.start(callback(post_events)); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 43 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 44 | // Posted events are dispatched in the context of the queue's |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 45 | // dispatch function |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 46 | queue.dispatch(400); // Dispatch time - 400msec |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 47 | // 400 msec - Only 2 set of events will be dispatched as period is 200 msec |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 48 | |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 49 | event_thread.join(); |
macboc01@E110593.Arm.com | 0:c7b889925ac6 | 50 | } |