- I (631) cpu_start: Starting scheduler on PRO CPU.
- I (0) cpu_start: Starting scheduler on APP CPU.
- state=1I (2655) BTDM_INIT: BT controller compile version [60aae55]
- I (2655) system_api: Base MAC address is not set
- I (2655) system_api: read default base MAC address from EFUSE
- I (2665) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
- thisonethistwothisthreethisdfourthidfivethissixI (3005) NimBLE_BLE_PRPH: BLE Host Task Started
- Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
- Core 0 register dump:
- PC : 0x400d818c PS : 0x00060d30 A0 : 0x800d78ec A1 : 0x3ffbbc10
- 0x400d818c: RelayDataMessageHandle at C:/Espressif/tools/espressif-ide/2.9.0/workspace/bleprph/main/gpio.c:162
- A2 : 0x00000094 A3 : 0x3ffb7ad4 A4 : 0x3ffc3664 A5 : 0x00000040
- A6 : 0x400d5550 A7 : 0x0000cdcd A8 : 0x00000000 A9 : 0x3ffbbbe0
- 0x400d5550: timer_task at C:/Espressif/frameworks/esp-idf-v5.0.1/components/esp_timer/src/esp_timer.c:428
- A10 : 0x00000000 A11 : 0x3ffb7ad4 A12 : 0x3ffc1fc2 A13 : 0x00060823
- A14 : 0x3ffbbbf0 A15 : 0x0000cdcd SAR : 0x00000012 EXCCAUSE: 0x0000001c
- EXCVADDR: 0x00000094 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xffffffff
- Backtrace: 0x400d8189:0x3ffbbc10 0x400d78e9:0x3ffbbc30 0x4017b9b7:0x3ffbbc50 0x400952e5:0x3ffbbc80
GURU meditation error panic at core Zero after BLE host task start
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
GURU meditation error panic at core Zero after BLE host task start
I am using BLPPRPH example. I have modified the example as i wanted to send and recieve the data. Compilation goes ok. but when esp32 starts .
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
Re: GURU meditation error panic at core Zero after BLE host task start
which code i should check for unrecognised variable?
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
Re: GURU meditation error panic at core Zero after BLE host task start
i saw it in build file. symbol _n couldnot resolved.
- Attachments
-
- Screenshot (87).png (136.5 KiB) Viewed 3725 times
-
- Posts: 1705
- Joined: Mon Oct 17, 2022 7:38 pm
- Location: Europe, Germany
Re: GURU meditation error panic at core Zero after BLE host task start
You would certainly get more and better help if you could start to show code that is in any way relevant to your problem.
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
Re: GURU meditation error panic at core Zero after BLE host task start
- static int
- gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle,
- struct ble_gatt_access_ctxt *ctxt,
- void *arg)
- {
- const ble_uuid_t *uuid;
- int rc=0;
- // uint8_t dats[50]={0};
- uuid = ctxt->chr->uuid;
- assert (0);
- if (ble_uuid_cmp(uuid, &gatt_svr_chr_sec_test_static_uuid.u) == 0) {
- switch (ctxt->op) {
- case BLE_GATT_ACCESS_OP_READ_CHR:
- if(state == 0){
- rc = os_mbuf_append(ctxt->om, &send_data,
- sizeof (send_data));
- return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;}
- else{
- rc = os_mbuf_append(ctxt->om, &send_data1,
- sizeof (send_data1));
- }
- return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
- case BLE_GATT_ACCESS_OP_WRITE_CHR:
- printf("Data from the client: %.*s\n", ctxt->om->om_len, ctxt->om->om_data);
- // gatt_svr_chr_write(ctxt->om, 1, ctxt->om->om_len,
- // &recieve_data, ctxt->om->om_len);
- for (int i =0;i < ctxt->om->om_len;i++ ){
- recieve_data[i]=ctxt->om->om_data[i];
- printf("recievedata =%c\n",recieve_data[i]);
- }
- printf("writing done");return 0;
- default:
- assert(0);
- printf("writing error");
- return BLE_ATT_ERR_UNLIKELY;
- }
- }
- /* Unknown characteristic; the nimble stack should not have called this
- * function.
- */
- assert(0);
- return BLE_ATT_ERR_UNLIKELY;
- }
- static const struct ble_gatt_svc_def gatt_svr_svcs[] = {
- {
- /*** Service: Security test. */
- .type = BLE_GATT_SVC_TYPE_PRIMARY,
- .uuid = &gatt_svr_svc_sec_test_uuid.u,
- .characteristics = (struct ble_gatt_chr_def[])
- {
- {
- /*** Characteristic: Static value. */
- .uuid = &gatt_svr_chr_sec_test_static_uuid.u,
- .access_cb = gatt_svr_chr_access_sec_test,
- .flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_READ_ENC |
- BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_WRITE_ENC,
- }, {
- 0, /* No more characteristics in this service. */
- }
- },
- },
- {
- 0, /* No more services. */
- },
- };
- void
- gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
- {
- char buf[BLE_UUID_STR_LEN];
- switch (ctxt->op) {
- case BLE_GATT_REGISTER_OP_SVC:
- MODLOG_DFLT(DEBUG, "registered service %s with handle=%d\n",
- ble_uuid_to_str(ctxt->svc.svc_def->uuid, buf),
- ctxt->svc.handle);
- break;
- case BLE_GATT_REGISTER_OP_CHR:
- MODLOG_DFLT(DEBUG, "registering characteristic %s with "
- "def_handle=%d val_handle=%d\n",
- ble_uuid_to_str(ctxt->chr.chr_def->uuid, buf),
- ctxt->chr.def_handle,
- ctxt->chr.val_handle);
- break;
- case BLE_GATT_REGISTER_OP_DSC:
- MODLOG_DFLT(DEBUG, "registering descriptor %s with handle=%d\n",
- ble_uuid_to_str(ctxt->dsc.dsc_def->uuid, buf),
- ctxt->dsc.handle);
- break;
- default:
- assert(0);
- break;
- }
- }
- int
- gatt_svr_init(void)
- {
- int rc;
- ble_svc_gap_init();
- ble_svc_gatt_init();
- ble_svc_ans_init();
- rc = ble_gatts_count_cfg(gatt_svr_svcs);
- if (rc != 0) {
- return rc;
- }
- rc = ble_gatts_add_svcs(gatt_svr_svcs);
- if (rc != 0) {
- return rc;
- }
- return 0;
- }
bleprph_advertise(void)
{
struct ble_gap_adv_params adv_params;
struct ble_hs_adv_fields fields;
const char *name;
int rc;
/**
* Set the advertisement data included in our advertisements:
* o Flags (indicates advertisement type and other general info).
* o Advertising tx power.
* o Device name.
* o 16-bit service UUIDs (alert notifications).
*/
memset(&fields, 0, sizeof fields);
/* Advertise two flags:
* o Discoverability in forthcoming advertisement (general)
* o BLE-only (BR/EDR unsupported).
*/
fields.flags = BLE_HS_ADV_F_DISC_GEN |
BLE_HS_ADV_F_BREDR_UNSUP;
/* Indicate that the TX power level field should be included; have the
* stack fill this value automatically. This is done by assigning the
* special value BLE_HS_ADV_TX_PWR_LVL_AUTO.
*/
fields.tx_pwr_lvl_is_present = 1;
fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
name = ble_svc_gap_device_name();
fields.name = (uint8_t *)name;
fields.name_len = strlen(name);
fields.name_is_complete = 1;
fields.uuids16 = (ble_uuid16_t[]) {
BLE_UUID16_INIT(GATT_SVR_SVC_ALERT_UUID)
};
fields.num_uuids16 = 1;
fields.uuids16_is_complete = 1;
rc = ble_gap_adv_set_fields(&fields);
if (rc != 0) {
MODLOG_DFLT(ERROR, "error setting advertisement data; rc=%d\n", rc);
return;
}
/* Begin advertising. */
memset(&adv_params, 0, sizeof adv_params);
adv_params.conn_mode = BLE_GAP_CONN_MODE_UND;
adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN;
rc = ble_gap_adv_start(own_addr_type, NULL, BLE_HS_FOREVER,
&adv_params, bleprph_gap_event, NULL);
if (rc != 0) {
MODLOG_DFLT(ERROR, "error enabling advertisement; rc=%d\n", rc);
return;
}
}
#endif
#if MYNEWT_VAL(BLE_POWER_CONTROL)
static void bleprph_power_control(uint16_t conn_handle)
{
int rc;
rc = ble_gap_read_remote_transmit_power_level(conn_handle, 0x01 ); // Attempting on LE 1M phy
assert (rc == 0);
rc = ble_gap_set_transmit_power_reporting_enable(conn_handle, 0x1, 0x1);
assert (rc == 0);
}
#endif
/**
* The nimble host executes this callback when a GAP event occurs. The
* application associates a GAP event callback with each connection that forms.
* bleprph uses the same callback for all connections.
*
* @param event The type of event being signalled.
* @param ctxt Various information pertaining to the event.
* @param arg Application-specified argument; unused by
* bleprph.
*
* @return 0 if the application successfully handled the
* event; nonzero on failure. The semantics
* of the return code is specific to the
* particular GAP event being signalled.
*/
static int
bleprph_gap_event(struct ble_gap_event *event, void *arg)
{
struct ble_gap_conn_desc desc;
int rc;
switch (event->type) {
case BLE_GAP_EVENT_CONNECT:
/* A new connection was established or a connection attempt failed. */
MODLOG_DFLT(INFO, "connection %s; status=%d ",
event->connect.status == 0 ? "established" : "failed",
event->connect.status);
if (event->connect.status == 0) {
rc = ble_gap_conn_find(event->connect.conn_handle, &desc);
assert(rc == 0);
bleprph_print_conn_desc(&desc);
}
//rc = ble_gap_security_initiate(&desc);
MODLOG_DFLT(INFO, "\n");
if (event->connect.status != 0) {
/* Connection failed; resume advertising. */
#if CONFIG_EXAMPLE_EXTENDED_ADV
ext_bleprph_advertise();
#else
bleprph_advertise();
#endif
}
#if MYNEWT_VAL(BLE_POWER_CONTROL)
bleprph_power_control(event->connect.conn_handle);
ble_gap_event_listener_register(&power_control_event_listener,
bleprph_gap_event, NULL);
#endif
return 0;
case BLE_GAP_EVENT_DISCONNECT:
MODLOG_DFLT(INFO, "disconnect; reason=%d ", event->disconnect.reason);
bleprph_print_conn_desc(&event->disconnect.conn);
MODLOG_DFLT(INFO, "\n");
/* Connection terminated; resume advertising. */
#if CONFIG_EXAMPLE_EXTENDED_ADV
ext_bleprph_advertise();
#else
bleprph_advertise();
#endif
return 0;
case BLE_GAP_EVENT_CONN_UPDATE:
/* The central has updated the connection parameters. */
MODLOG_DFLT(INFO, "connection updated; status=%d ",
event->conn_update.status);
rc = ble_gap_conn_find(event->conn_update.conn_handle, &desc);
assert(rc == 0);
bleprph_print_conn_desc(&desc);
MODLOG_DFLT(INFO, "\n");
return 0;
case BLE_GAP_EVENT_ADV_COMPLETE:
MODLOG_DFLT(INFO, "advertise complete; reason=%d",
event->adv_complete.reason);
#if !CONFIG_EXAMPLE_EXTENDED_ADV
bleprph_advertise();
#endif
return 0;
case BLE_GAP_EVENT_ENC_CHANGE:
/* Encryption has been enabled or disabled for this connection. */
MODLOG_DFLT(INFO, "encryption change event; status=%d ",
event->enc_change.status);
rc = ble_gap_conn_find(event->enc_change.conn_handle, &desc);
assert(rc == 0);
bleprph_print_conn_desc(&desc);
MODLOG_DFLT(INFO, "\n");
return 0;
case BLE_GAP_EVENT_SUBSCRIBE:
MODLOG_DFLT(INFO, "subscribe event; conn_handle=%d attr_handle=%d "
"reason=%d prevn=%d curn=%d previ=%d curi=%d\n",
event->subscribe.conn_handle,
event->subscribe.attr_handle,
event->subscribe.reason,
event->subscribe.prev_notify,
event->subscribe.cur_notify,
event->subscribe.prev_indicate,
event->subscribe.cur_indicate);
return 0;
case BLE_GAP_EVENT_MTU:
MODLOG_DFLT(INFO, "mtu update event; conn_handle=%d cid=%d mtu=%d\n",
event->mtu.conn_handle,
event->mtu.channel_id,
event->mtu.value);
return 0;
case BLE_GAP_EVENT_REPEAT_PAIRING:
/* We already have a bond with the peer, but it is attempting to
* establish a new secure link. This app sacrifices security for
* convenience: just throw away the old bond and accept the new link.
*/
/* Delete the old bond. */
rc = ble_gap_conn_find(event->repeat_pairing.conn_handle, &desc);
assert(rc == 0);
ble_store_util_delete_peer(&desc.peer_id_addr);
/* Return BLE_GAP_REPEAT_PAIRING_RETRY to indicate that the host should
* continue with the pairing operation.
*/
return BLE_GAP_REPEAT_PAIRING_RETRY;
case BLE_GAP_EVENT_PASSKEY_ACTION:
ESP_LOGI(tag, "PASSKEY_ACTION_EVENT started \n");
struct ble_sm_io pkey = {0};
int key = 0;
if (event->passkey.params.action == BLE_SM_IOACT_DISP) {
pkey.action = event->passkey.params.action;
pkey.passkey = 123456; // This is the passkey to be entered on peer
ESP_LOGI(tag, "Enter passkey %" PRIu32 "on the peer side", pkey.passkey);
rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
ESP_LOGI(tag, "ble_sm_inject_io result: %d\n", rc);
} else if (event->passkey.params.action == BLE_SM_IOACT_NUMCMP) {
ESP_LOGI(tag, "Passkey on device's display: %" PRIu32 , event->passkey.params.numcmp);
ESP_LOGI(tag, "Accept or reject the passkey through console in this format -> key Y or key N");
pkey.action = event->passkey.params.action;
// if (scli_receive_key(&key)) {
pkey.numcmp_accept = key;
// } else {
pkey.numcmp_accept = 0;
ESP_LOGE(tag, "Timeout! Rejecting the key");
// }
rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
ESP_LOGI(tag, "ble_sm_inject_io result: %d\n", rc);
} else if (event->passkey.params.action == BLE_SM_IOACT_OOB) {
static uint8_t tem_oob[16] = {0};
pkey.action = event->passkey.params.action;
for (int i = 0; i < 16; i++) {
pkey.oob = tem_oob;
}
rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
ESP_LOGI(tag, "ble_sm_inject_io result: %d\n", rc);
} else if (event->passkey.params.action == BLE_SM_IOACT_INPUT) {
ESP_LOGI(tag, "Enter the passkey through console in this format-> key 123456");
pkey.action = event->passkey.params.action;
/* if (scli_receive_key(&key)) {
pkey.passkey = key;
} else {
pkey.passkey = 0;
ESP_LOGE(tag, "Timeout! Passing 0 as the key");
}*/
rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey);
ESP_LOGI(tag, "ble_sm_inject_io result: %d\n", rc);
}
return 0;
#if MYNEWT_VAL(BLE_POWER_CONTROL)
case BLE_GAP_EVENT_TRANSMIT_POWER:
MODLOG_DFLT(INFO, "Transmit power event : status=%d conn_handle=%d reason=%d "
"phy=%d power_level=%x power_level_flag=%d delta=%d",
event->transmit_power.status,
event->transmit_power.conn_handle,
event->transmit_power.reason,
event->transmit_power.phy,
event->transmit_power.transmit_power_level,
event->transmit_power.transmit_power_level_flag,
event->transmit_power.delta);
return 0;
case BLE_GAP_EVENT_PATHLOSS_THRESHOLD:
MODLOG_DFLT(INFO, "Pathloss threshold event : conn_handle=%d current path loss=%d "
"zone_entered =%d",
event->pathloss_threshold.conn_handle,
event->pathloss_threshold.current_path_loss,
event->pathloss_threshold.zone_entered);
return 0;
#endif
}
return 0;
}
static void
bleprph_on_reset(int reason)
{
MODLOG_DFLT(ERROR, "Resetting state; reason=%d\n", reason);
}
#if CONFIG_EXAMPLE_RANDOM_ADDR
static void
ble_app_set_addr(void)
{
ble_addr_t addr;
int rc;
/* generate new non-resolvable private address */
rc = ble_hs_id_gen_rnd(0, &addr);
assert(rc == 0);
/* set generated address */
rc = ble_hs_id_set_rnd(addr.val);
assert(rc == 0);
}
#endif
static void
bleprph_on_sync(void)
{
int rc;
#if CONFIG_EXAMPLE_RANDOM_ADDR
/* Generate a non-resolvable private address. */
ble_app_set_addr();
#endif
/* Make sure we have proper identity address set (public preferred) */
#if CONFIG_EXAMPLE_RANDOM_ADDR
rc = ble_hs_util_ensure_addr(1);
#else
rc = ble_hs_util_ensure_addr(0);
#endif
assert(rc == 0);
/* Figure out address to use while advertising (no privacy for now) */
rc = ble_hs_id_infer_auto(0, &own_addr_type);
if (rc != 0) {
MODLOG_DFLT(ERROR, "error determining address type; rc=%d\n", rc);
return;
}
/* Printing ADDR */
uint8_t addr_val[6] = {0};
rc = ble_hs_id_copy_addr(own_addr_type, addr_val, NULL);
MODLOG_DFLT(INFO, "Device Address: ");
MODLOG_DFLT(INFO, "\n");
/* Begin advertising. */
#if CONFIG_EXAMPLE_EXTENDED_ADV
ext_bleprph_advertise();
#else
bleprph_advertise();
#endif
}
void bleprph_host_task(void *param)
{
ESP_LOGI(tag, "BLE Host Task Started");
printf("xtaskcreated for nmfghfhfible");
/* This function will return only when nimble_port_stop() is executed */
printf("xtaskcreated for nmible");
nimble_port_run();
printf("ythisisseven");
nimble_port_freertos_deinit();
printf("thisisieight");
}
void ble_deinit(){
nimble_port_deinit();
nimble_port_freertos_deinit();
}
void ble_init(void){
int rc;
nimble_port_init();
printf("thisone");
/* Initialize the NimBLE host configuration. */
ble_hs_cfg.reset_cb = bleprph_on_reset;
ble_hs_cfg.sync_cb = bleprph_on_sync;
ble_hs_cfg.gatts_register_cb = gatt_svr_register_cb;
ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
printf("thistwo");
ble_hs_cfg.sm_io_cap = CONFIG_EXAMPLE_IO_TYPE;
#ifdef CONFIG_EXAMPLE_BONDING
ble_hs_cfg.sm_bonding = 1;
#endif
#ifdef CONFIG_EXAMPLE_MITM
ble_hs_cfg.sm_mitm = 1;
#endif
#ifdef CONFIG_EXAMPLE_USE_SC
ble_hs_cfg.sm_sc = 1;
#else
ble_hs_cfg.sm_sc = 0;
#endif
#ifdef CONFIG_EXAMPLE_BONDING
ble_hs_cfg.sm_our_key_dist = 1;
ble_hs_cfg.sm_their_key_dist = 1;
#endif
printf("thisthree");
rc = gatt_svr_init();
assert(rc == 0);
/* Set the default device name. */
printf("thisdfour");
rc = ble_svc_gap_device_name_set("MiBaio");
assert(rc == 0);
printf("thidfive");
/* XXX Need to have template for store */
ble_store_config_init();
printf("thissix");
nimble_port_freertos_init(bleprph_host_task);
printf("thisseven");
///xTaskCreate(&task, "task", 4096, NULL, 5, NULL);
}
][/Codebox]
- int
- app_main(void)
- {
- /* Initialize NVS — it is used to store PHY calibration data */
- esp_err_t ret = nvs_flash_init();
- if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
- ESP_ERROR_CHECK(nvs_flash_erase());
- ret = nvs_flash_init();
- }
- tm1637_led_t * lcd = tm1637_init(TM1637_CLOCK_PIN, TM1637_DATA_PIN);
- tm1637_set_brightness(lcd,4);
- //xTaskCreate(&lcd_tm1637_task, "lcd_tm1637_task", 4096, NULL, 4, NULL);
- ESP_ERROR_CHECK(ret);
- ret = nvs_open("storage", NVS_READWRITE, &mibaio_nvs_handle2);
- ret=nvs_get_str(mibaio_nvs_handle2,"myssid",&userid,33);
- ret=nvs_get_str(mibaio_nvs_handle2,"mypassword",&password,64);
- if(ret == ESP_ERR_NVS_NOT_FOUND) {
- send_dat[0]='n';
- nvs_close(mibaio_nvs_handle2);
- nvs_commit(mibaio_nvs_handle2);
- state=1;
- printf("state=1");
- // app_wifi();
- // esp_wifi_scan_stop();
- // esp_wifi_stop();
- // esp_wifi_deinit();
- // vTaskDelay(100/portTICK_PERIOD_MS);
- vTaskDelay(1000/portTICK_PERIOD_MS);
- ble_init();
- RelayDataMessageHandle(&recieve_data[0]);
- }
- if(ret==ESP_OK){
- nvs_close(mibaio_nvs_handle2);
- state=0;
- printf("state=0");
- ble_deinit();
- esp_wifi_deinit();
- ble_init();
- }}
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
Re: GURU meditation error panic at core Zero after BLE host task start
is this the problem?
- Attachments
-
- Screenshot (88).png (108.75 KiB) Viewed 3578 times
-
- Posts: 1705
- Joined: Mon Oct 17, 2022 7:38 pm
- Location: Europe, Germany
Re: GURU meditation error panic at core Zero after BLE host task start
Ok, I guess I asked for it...madhusudan_jadhav wrote: ↑Sat May 06, 2023 11:38 am
static int gatt_svr_chr_access_sec_test(uint16_t conn_handle, uint16_t attr_handle, . . .
And somehow you still managed to not include the RelayDataMessageHandle function where the error occurred...
-
- Posts: 28
- Joined: Fri Mar 10, 2023 9:05 am
Re: GURU meditation error panic at core Zero after BLE host task start
I did some workaround. now problem is solved
Who is online
Users browsing this forum: Google [Bot] and 94 guests