calling pm_peers_delete cause fatal error
why does it happened?
nRF5_SDK_17.0.2_d674dde/ble_app_multirole_lesc

calling pm_peers_delete cause fatal error
why does it happened?
nRF5_SDK_17.0.2_d674dde/ble_app_multirole_lesc

You need to add DEBUG as preprocessor define for the error to be printed.

can you elaborate on it? hardly understand what u are talking about
From your log, you can see that "Fatal error" is printed:

This means that a function returned an error-code, and that error-code was passed to APP_ERROR_CHECK(), and app_error_fault_handler() is called.
The default behavior when DEBUG is not defined, is to just reset the device using NVIC_SystemReset().
But if you want to debug the issue, and get the error information, then you don't want the chip to reset. So then you need to change the behavior of app_error_fault_handler() by defining DEBUG. How a preprocessor define is added depends on what IDE/toolchain you are using.
change the behavior of app_error_fault_handler() by defining DEBUG
Can you teach me how to do so?
So, here is the issue, tell me if you've heard it before.
In nRF5_SDK_17.0.2_d674dde/ble_app_multirole_lesc
for the ide I use Segger embedded studio for ARM

In the main function, if I remove the if-else statement and force to delete_bonds while booting up the SYstem will keep rebooting and I don't know why(acting as an infinite loop)

what I am trying to do is that I am adding the pm_peers_delete() function into the button 3 event(bsp_event_handler) which is in the main.c
but yesterday I found out it will just keep looping the pm_peers_delete function and crash
seems like the same function act the same in the main function(same issue)
so why does this happened?
btw I did not add any for(;;) or while(true) outside the scope is this a bug??
yu1998 said:Can you teach me how to do so?
In SES, set this to DEBUG:
It should then not reset if you enter the app_error_fault_handler

It shows as the pictures
why is this happening
main.c 282
static void adv_scan_start(void) {
ret_code_t err_code;
scan_start();
// Turn on the LED to signal scanning.
bsp_board_led_on(CENTRAL_SCANNING_LED);
// Start advertising.
err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
APP_ERROR_CHECK(err_code);
NRF_LOG_INFO("Advertising");
}
it still keeps crashing and rebooting
while am I using the release mode it did not happen
but why
If it's ble_advertising_start() that returns error 8 (NRF_ERROR_INVALID_STATE), then looking at the doc here , it means that the advertising module is not initialized. i.e. advertising_init() need to be called before adv_scan_start()
If it's ble_advertising_start() that returns error 8 (NRF_ERROR_INVALID_STATE), then looking at the doc here , it means that the advertising module is not initialized. i.e. advertising_init() need to be called before adv_scan_start()
it means that the advertising module is not initialized. i.e. advertising_init() need to be called before adv_scan_start()

but i have already called
OK, it could be that underlaying function sd_ble_gap_adv_start() that also returns NRF_ERROR_INVALID_STATE
* @retval ::NRF_ERROR_INVALID_STATE adv_handle is not configured or already advertising.
2 delete_bonds could perhaps trigger this.

Try to remove the first call to delete_bonds().
If you want to "force" delete_bonds to be called, then set erase_bonds= true instead
but why cant i direct use delete_bonds func even I remove the second one it still happened
adv_handle is not configured or already advertising.
also did you mean delete_bond() will call advertise start function? how to fix that?
Likely because you are trying to call adv_scan_start() in main(), but it's already advertising.
delete_bonds() -> event PM_EVT_PEERS_DELETE_SUCEEDED -> adv_scan_start() called in pm_evt_handler()
, then you call adv_scan_start() again in main(), and get NRF_ERROR_INVALID_STATE.
Sigurd said:If you want to "force" delete_bonds to be called, then set erase_bonds= true instead
alternatively, you could try this:
advertising_init();
delete_bonds(); // Scanning and advertising is started by PM_EVT_PEERS_DELETE_SUCEEDED.
// Start execution.
NRF_LOG_INFO("LE Secure Connections example started.");
// Enter main loop.
for (;;)
{
idle_state_handle();
}
so it seems like the adv_scan_start() cause this so can I add delete_bonds() to a button without error?
i need to try to stop advertising,but it seems like it cannot be stop using
err_code=sd_ble_gap_adv_stop(m_advertising.adv_handle);
APP_ERROR_CHECK(err_code);
the same error shows as above
so how to stop advertise correctly