I'm using nRF52832 SoC with nRF5_SDK17.1.0 and SoftDevice v7.3.0. I'm using following code to write data into flash.
err_code = nrf_fstorage_write(&g_fs, write_addr, buffer32, 128, NULL);
wait_while_fs_busy(&g_fs);
/* Wait helper: sleep while fstorage is busy (write/erase are async). */
static void wait_while_fs_busy(nrf_fstorage_t const * p_fs)
{
uint32_t waited_ms = 0;
while (nrf_fstorage_is_busy(p_fs))
{
if ((p_fs->p_api == &nrf_fstorage_sd) && nrf_sdh_is_enabled())
{
__enable_irq();
__set_BASEPRI(0);
(void)sd_app_evt_wait();
}
else
{
__WFE();
}
(void)NRF_LOG_PROCESS();
waited_ms++;
if (waited_ms > 5000)
{
NRF_LOG_ERROR("fstorage wait timeout");
break;
}
NRF_LOG_PROCESS();
}
}
It works fine when compiled in debug mode.
Whenever it's compiled in release mode and fstorage is used while ble is connected, the code enters 2 to 3 times sd_app_evt_wait(); an then hangs in this function.
Whenever it's compiled in release mode and fstorage is used after ble is disconnected, the code enters sd_app_evt_wait(); and hangs in this function immediately.
--> I guess no event is generated any more or masked.
Why this is happening?


