ble_app_template APP_ERROR:ERROR:Fatal |
Добавил(а) microsin |
После некоторого периода ожидания (приблизительно 3 минуты), в течение которого BLE-устройство ble_app_template выдает пакеты оповещения (advertising), возникает ошибка, при которой в RTT-лог выводится сообщение APP_ERROR:ERROR:Fatal. Эта ошибка появляется только в случае, когда к устройству подключена консоль сообщений RTT [2] в момент, когда вызывается обработчик событий оповещения on_adv_evt с кодом события BLE_ADV_EVT_IDLE. Тогда вызывается функция sleep_mode_enter(), восстановление из которой возможно только путем полного сброса системы. /**@brief Функция для обработки событий оповещения (advertising events).
*
* @details Эта функция будет вызвана, когда SoftDevice передает
* в приложение события оповещения.
*
* @param[in] ble_adv_evt Событие оповещения BLE.
*/
static void on_adv_evt(ble_adv_evt_t ble_adv_evt) { uint32_t err_code; switch (ble_adv_evt) { case BLE_ADV_EVT_FAST: NRF_LOG_INFO("Fast advertising\r\n"); err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); APP_ERROR_CHECK(err_code); break; case BLE_ADV_EVT_IDLE: sleep_mode_enter(); break; default: break; } } В этот момент устройство входит в режим сна, и при активной консоли RTT происходит ошибка APP_ERROR:ERROR:Fatal. Если в этот момент нажать на любую из 4 кнопок DK, то произойдет перезагрузка. При отключенном RTT устройство перезагрузится автоматически. В принципе такое поведение с входом в режим сна вызовом функции sleep_mode_enter() было изначально предусмотрено как в примере приложения ble_app_template, так и во многих других примерах периферийных устройств BLE из SDK от Nordic Semiconductor. Это сделано специально, чтобы устройство уходило в режим сна для максимальной экономии энергии. Интервал, через которые происходит уход в sleep_mode_enter - APP_ADV_TIMEOUT_IN_SECONDS. Отключить такое поведение просто, если закомментировать вызов функции sleep_mode_enter. Тогда устройство будет бесконечно находиться в режиме оповещения. case BLE_ADV_EVT_IDLE: // sleep_mode_enter(); break; [Ссылки] 1. Fatal error on sleep 0x4001 site:devzone.nordicsemi.com. |