nRF51 SDK - S210 SoftDevice
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Schedule handling library

The scheduler is used for transferring execution from the interrupt context to the main context.

Requirements:

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, please see the implementations of ble_sdk_app_hids_mouse and ble_sdk_app_hids_keyboard.

scheduler_working.jpg
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.

ble_event_with_scheduler.jpg
Figure 1: Receiving an event from the ble stack causing a service event


battery_timer_with_scheduler.jpg
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.

ble_event_without_scheduler.jpg
Figure 3: Receiving an event from the ble stack causing a service event


battery_timer_without_scheduler.jpg
Figure 4: The battery timer expires