Программирование ARM nRF5 SDK v12: примеры приложений BLE Mon, September 27 2021  

Поделиться

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

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

nRF5 SDK v12: примеры приложений BLE Печать
Добавил(а) microsin   

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

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

Scheduler: события передаются с уровня прерывания (ISR) в бесконечный цикл main (режим потока) c использованием планировщика (scheduler) [6].
App Low only: весь код служб и код приложения выполняется на низком уровне прерываний.

В обоих этих вариантах примеры приложений имеют много сходств:

Функция main: здесь присутствует некоторое количество вызовов инициализирующих функций, за которыми идет небольшой цикл main. В приложении "App Low only" этот цикл содержит в себе только лишь обработку управления питанием, вызов только одной функции power_manage(). В приложениях Scheduler тело цикла в дополнение к power_manage() также содержит вызов app_sched_schedule(). Для дополнительной информации о режимах пониженного энергопотребления (low power modes), используемых в примерах приложений, см. секцию Power Management документации по профилированию потребляемой приложением энергии.

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

Инициализация стека BLE: должен быть инициализирован SoftDevice вместе с некоторыми параметрами. Большинство примеров в SDK используют конфигурацию по умолчанию softdevice_enable_get_default_config. В случаях, когда Вы не хотите использовать эту настройку по умолчанию, запомните, что параметр ble_enable_params напрямую влияет на адрес начала ОЗУ приложения (start address application's RAM). Перед вызовом softdevice_enable Вы можете вызвать макрос CHECK_RAM_START_ADDR, который проверит корректность установки RAM start address в сравнении с настройкой SoftDevice, которая передается в этот макрос.

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

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

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

Обработчики событий служб (Service event handlers): приложение может предоставить обработчики событий для служб, позволяя службе информировать приложение о событиях внутри службы. Для некоторых служб эта возможность опциональна, а для других обязательна.

Обработчики ошибок служб (Service error handlers): для некоторых служб приложение может предоставить обработчик ошибки (error handler), позволяя тем самым службе информировать приложение о возникающих ошибках.

Обработчик ошибок (Error handler): приложения могут реализовать callback-функцию обработчика ошибок (error handler callback function) с именем app_error_fault_handler, которая будет вызываться, когда происходят фатальные (не допускающие восстановления без перезапуска) ошибки. Для дополнительной информации см. Error module.

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

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

См. описание библиотеки обработки планировщика [5], где показан поток событий для различных сценариев приложения, как с применением Scheduler, так и без него.

Примеры:

BLE Central
BLE Central & Peripheral
BLE Peripheral
BLE Secure DFU Bootloader

[Ссылки]

1. nRF5 SDK v12 Bluetooth low energy examples site:nordicsemi.com.
2. nRF5 SDK v12 Power Profiling Application site:nordicsemi.com.
3. nRF5 SDK v12 Error module site:nordicsemi.com.
4. nRF5 SDK v15 Application Timer.
5. nRF5 SDK v12 Schedule handling library site:nordicsemi.com.
6. nRF5x SDK: что такое планировщик (sheduler).

 

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


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

Top of Page