Программирование ARM nRF51 SDK S130 SoftDevice BLE Central Mon, September 27 2021  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF51 SDK S130 SoftDevice BLE Central Печать
Добавил(а) microsin   

Вместе с nRF51 SDK поставляются примеры приложений, реализующие профили BLE, и демонстрирующие использование сервисов BLE.

Предлагаются 2 типа примеров приложений:

Scheduler (на основе планировщика): события передаются из уровня прерываний в основной цикл main (режим потоков, thread mode) с помощью планировщика.

App Low (только обработка низкого уровня в приложении): все сервисы и код приложения выполняется на низком уровне, в прерываниях (App Low interrupt level).

В обоих вариантах дизайна приложения примеров имеют много общего:

Функция main. Приложение до входа в основной цикл функции main состоит из некоторого количества инициализационных вызовов, за которыми идет маленькое тело бесконечного цикла. В приложении "App Low only" бесконечный цикл обрабатывает только управление питанием. В приложениях Scheduler бесконечный цикл состоит из вызова app_sched_schedule() в дополнение к управлению питанием.

Инициализация сервиса. Все приложения содержат функцию services_init. В ней инициализируются все службы, которые должны использоваться в приложении.

BLE stack ISR. Во всех приложениях содержится модуль обработчика событий (SoftDevice Event Handler), в котором содержится ISR стека BLE (SWI2_IRQHandler). Этот обработчик прерывания будет вызываться каждый раз, когда стек захочет передать событие а приложение. Обработчик читает событие стека и передает это событие в приложение через вызов callback-функции. в приложениях на основе Scheduler эта callback-функция всегда называется ble_evt_schedule(). В приложениях, не использующих Scheduler, эта функция всегда называется ble_evt_dispatch(). Callback-функция перенаправляет событие в обработчик событий стека (BLE stack event handler) всех своих служб и модулей, имеющих такой обработчик (либо напрямую, либо через Scheduler). Опционально она может также перенаправлять событие в обработчик стека BLE, специфичный для приложения.

Обработчики событий Service BLE stack. Сервисы могут реализовывать свои собственные обработчики событий стека BLE (BLE stack event). Они должны вызываться, когда SWI2_IRQHandler (находится в SoftDevice Event Handler) получает событие BLE (см. предыдущий пункт). Обработчики будут реагировать на события, которые относятся к сервису, игнорируя все остальные события.

Обработчик события приложения BLE stack. Опционально приложение может реализовать свой собственный обработчик события стека BLE. Он должен вызываться, когда SWI2_IRQHandler (находится в SoftDevice Event Handler) получает событие BLE. Обработчик будет реагировать на события, которые относятся к приложению, игнорируя все остальные события.

Обработчики события сервиса. Приложение может предоставить обработчики события для сервисов, что позволяет службе информировать приложение о событиях внутри службы. Для некоторых сервисов это опционально, в то время как для других обязательно.

Обработчики ошибки сервиса. Для некоторых служб приложение может предоставить обработчики ошибки, что позволяет службе оповещать приложение об ошибках.

Обработчик assert. Приложения BLE должны реализовать callback-функцию обработчика assert с именем assert_nrf_callback. Эта функция будет передана в инициализацию системы S130 SoftDevice, используя sd_softdevice_enable. При приложениях примера BLE Central обработчик assert_nrf_callback распространяет все ассерты в app_error_handler. Если нужны разные действия для ошибки приложения и для ассертов BLE S130 SoftDevice, должна быть реализована отдельная функция assert_nrf_callback.

Обработчик ошибки. Приложения должны реализовать callback-функцию обработчика ошибки с именем app_error_handler. Она вызывается напрямую из макроса приложения APP_ERROR_HANDLER macro (реализован в хедере app_error.h), и косвенно из APP_ERROR_CHECK и APP_ERROR_CHECK_BOOL.

Поведение при достижении максимального количества связей. Все приложения, которые поддерживают связи, используют модуль менеджера устройства (device manager). Когда менеджер устройств оповещает приложение, что не может сохранить новое запросившее связь периферийное устройство во flash, приложение попадает в assert. Когда это происходит, устройству разрешается перейти в режим System OFF, и затем нажимается кнопка Button 1. Это разбудит приложение, и очистит все существовавшие связи. Связи можно также очистить передергиванием питания платы путем удержания в нажатом состоянии Button 1.

В приложении, которое использует Scheduler, вместо прямого вызова обработчиков события сервиса/приложения из callback-функции SoftDevice Event Handler, callback-функция передает "обернутые" события в Scheduler, и обработчик "обернутых" событий будет вызывать обработчики события сервиса/приложения, тем самым достигается вызов обработчиков события сервиса/приложения в режиме потока (thread mode) вместо режима прерывания.

Когда инициализируется модуль таймера приложения (Application Timer), приложения на основе Scheduler должны предоставить указатель на функцию app_sched_timer_event_schedule() для вызова app_timer_init(). Эта функция будет передает выполнение обработчиков таймаута таймера в главный цикл main с помощью Scheduler.

Примеры:

BLE Heart Rate Collector Example
BLE Multi-link Example

[Ссылки]

1. nRF51 SDK S130 SoftDevice Examples BLE Central site:nordicsemi.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page