Программирование ARM Для чего нужна функция sd_app_evt_wait Tue, January 25 2022  

Поделиться

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

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

Для чего нужна функция sd_app_evt_wait Печать
Добавил(а) microsin   

Функция sd_app_evt_wait приостанавливает работу приложения и ожидает наступления события приложения (application event).

uint32_t sd_app_evt_wait (void);

Событие приложения это либо прерывание приложения (application interrupt), либо ожидающее обработки прерывание, когда прерывание запрещено. Обычно вызов функции sd_app_evt_wait вставлен в бесконечный цикл функции main. Когда прерывание разрешено, прерывание будет выполнено немедленно, поскольку функция sd_app_evt_wait будет ожидать в режиме потока, а затем выполнение кода будет возвращено в основной поток приложения (произойдет очередная прокрутка тела бесконечного цикла). Если прерывание запрещено, его соответствующий флаг установлен и ожидает обработки, то после вызова функции sd_app_evt_wait произойдет немедленный возврат из неё, и управление будет возвращено в основной поток приложения. Приложение должно гарантировать, что флаг ожидания обработки прерывания очищен вызовом sd_nvic_ClearPendingIRQ, чтобы произошел переход в режим сна с помощью функции sd_app_evt_wait. Это надо делать только для запрещенных прерываний, поскольку для разрешенных прерываний обработчик прерывания (ISR) будет сам очищать свой флаг прерывания.

Чтобы произошло пробуждение из состояния с запрещенными прерываниями, должен быть установлен флаг SEVONPEND в системном регистре управления Cortex-M0 (System Control Register, SCR).

См. также CMSIS_SCB [3].

Примечание: если с момента последнего вызова sd_app_evt_wait произошло прерывание приложения, эта функция немедленно сделает возврат и вернет управление в вызывавший код без входа в режим сна. Это позволяет избежать состояний гонки (race conditions), которые могут произойти, когда флаг обновляется в обработчике прерывания, и обрабатывается в главном цикле main.

По сути функция sd_app_evt_wait это обертка над ARM-инструкцией WFE (Wait For Event [2, 3]), которая переводит CPU в состояние пониженного потребления энергии (low-power state). Можно предположить, что Nordic добавила в этой функции некоторый функционал по сохранению внутреннего состояния, чтобы безопасно разбудить CPU и как можно быстрее приступить к обработке критичных по времени процедур радиообмена.

Состояние после возврата: произошло прерывание приложения, или установился флаг прерывания, требующий обработки.

Возвращаемое значение: NRF_SUCCESS.

[Ссылки]

1. S132 SoftDevice v3.0.0 API sd_app_evt_wait site:infocenter.nordicsemi.com.
2. Режимы пониженного энергопотребления STM32F103xx.
3. nRFxx: аббревиатуры и термины.

 

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


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

Top of Page