nRF5 SDK v12: примеры приложений BLE |
![]() |
Добавил(а) microsin |
В SDK предоставляются примеры приложений, в которых реализованы профили BLE и демонстрируется использование служб BLE. Предлагаются 2 типа разработки примеров приложений: Scheduler: события передаются с уровня прерывания (ISR) в бесконечный цикл main (режим потока) c использованием планировщика (scheduler) [6]. В обоих этих вариантах примеры приложений имеют много сходств: • Функция 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 [Ссылки] 1. nRF5 SDK v12 Bluetooth low energy examples site:nordicsemi.com. |