The scheduler is used for transferring execution from the interrupt context to the main context.
Logic in main context:
- Define an event handler for each type of event expected.
- Initialize the scheduler by calling the APP_SCHED_INIT() macro before entering the application main loop.
- Call app_sched_execute() from the main loop each time the application wakes up because of an event (typically when sd_app_evt_wait() returns).
Logic in interrupt context:
- In the interrupt handler, call app_sched_event_put() with the appropriate data and event handler. This will insert an event into the scheduler's queue. The app_sched_execute() function will pull this event and call its handler in the main context.
For an example usage of the scheduler, see the implementations of HID Mouse Application and HID Keyboard Application.
The high level design of the scheduler
Applications using the Scheduler
Sequence diagrams illustrating the flow of events for various scenarios in the example applications when using the Scheduler.
Figure 1: Receiving an event from the ble stack causing a service event
Figure 2: The battery timer expires
Applications not using the Scheduler
Sequence diagrams illustrating the flow of events for various scenarios in the example applications when not using the Scheduler.
Figure 3: Receiving an event from the ble stack causing a service event
Figure 4: The battery timer expires