Sysprogs forums › Forums › VisualGDB › MBED ble LED Example Hangs while debugging
- This topic has 1 reply, 2 voices, and was last updated 4 years, 7 months ago by support.
-
AuthorPosts
-
April 6, 2020 at 12:51 #27837KevinParticipant
Hi I’ve recently purchased Visual GDB and really like using it. I’ve been tasked to develop an application in MBED and have used the MBED template for Visual Studio 2019. I need to implement Bluetooth LE so I thought I would fire up the sample from the MBED website. It compiles correctly and flashes the board but when debugging or running it won’t get past the line
BLE &ble = BLE::Instance();
I’m fairly new to this platform so if anyone could help as in what settings i’m getting wrong or how to point me in the right direction. I’ve downloaded MBED studio and the same code compiles and runs successfully in that without hanging. The board i’m using is B-L475E-IOTA1 STM32L475. I’ve tried using the latest VisualGDB which is v 5.5 i believe and still the same result. I am using MBED 5.15 latest build
#include "ble/BLE.h" #include "LEDService.h" #include "pretty_printer.h" const static char DEVICE_NAME[] = "LED"; static EventQueue event_queue(/* event count */ 10 * EVENTS_EVENT_SIZE); class LEDDemo : ble::Gap::EventHandler { public: LEDDemo(BLE &ble, events::EventQueue &event_queue) : _ble(ble) , _event_queue(event_queue) , _alive_led(LED1, 1) , _actuated_led(LED2, 0) , _led_uuid(LEDService::LED_SERVICE_UUID) , _led_service(NULL) , _adv_data_builder(_adv_buffer) {} ~LEDDemo() { delete _led_service; } void start() { _ble.gap().setEventHandler(this); _ble.init(this, &LEDDemo::on_init_complete); _event_queue.call_every(500, this, &LEDDemo::blink); _event_queue.dispatch_forever(); } private: /** Callback triggered when the ble initialization process has finished */ void on_init_complete(BLE::InitializationCompleteCallbackContext *params) { if (params->error != BLE_ERROR_NONE) { printf("Ble initialization failed."); return; } _led_service = new LEDService(_ble, false); _ble.gattServer().onDataWritten(this, &LEDDemo::on_data_written); print_mac_address(); start_advertising(); } void start_advertising() { /* Create advertising parameters and payload */ ble::AdvertisingParameters adv_parameters( ble::advertising_type_t::CONNECTABLE_UNDIRECTED, ble::adv_interval_t(ble::millisecond_t(1000))); _adv_data_builder.setFlags(); _adv_data_builder.setLocalServiceList(mbed::make_Span(&_led_uuid, 1)); _adv_data_builder.setName(DEVICE_NAME); /* Setup advertising */ ble_error_t error = _ble.gap().setAdvertisingParameters( ble::LEGACY_ADVERTISING_HANDLE, adv_parameters); if (error) { printf("_ble.gap().setAdvertisingParameters() failed\r\n"); return; } error = _ble.gap().setAdvertisingPayload( ble::LEGACY_ADVERTISING_HANDLE, _adv_data_builder.getAdvertisingData()); if (error) { printf("_ble.gap().setAdvertisingPayload() failed\r\n"); return; } /* Start advertising */ error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE); if (error) { printf("_ble.gap().startAdvertising() failed\r\n"); return; } } /** * This callback allows the LEDService to receive updates to the ledState Characteristic. * * @param[in] params Information about the characterisitc being updated. */ void on_data_written(const GattWriteCallbackParams *params) { if ((params->handle == _led_service->getValueHandle()) && (params->len == 1)) { _actuated_led = *(params->data); } } void blink() { _alive_led = !_alive_led; } private: /* Event handler */ void onDisconnectionComplete(const ble::DisconnectionCompleteEvent&) { _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE); } private: BLE &_ble; events::EventQueue &_event_queue; DigitalOut _alive_led; DigitalOut _actuated_led; UUID _led_uuid; LEDService *_led_service; uint8_t _adv_buffer[ble::LEGACY_ADVERTISING_MAX_SIZE]; ble::AdvertisingDataBuilder _adv_data_builder; }; /** Schedule processing of events from the BLE middleware in the event queue. */ void schedule_ble_events(BLE::OnEventsToProcessCallbackContext *context) { event_queue.call(Callback<void()>(&context->ble, &BLE::processEvents)); } int main() { BLE &ble = BLE::Instance(); ble.onEventsToProcess(schedule_ble_events); LEDDemo demo(ble, event_queue); demo.start(); return 0; }
Json
{
"target_overrides": {
"DISCO_L475VG_IOT01A": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_BLUENRG"],
"ble.ble-feature-extended-advertising": 1,
"ble.ble-feature-gatt-client": 1,
"ble.ble-feature-gatt-server": 1,
"ble.ble-feature-periodic-advertising": 1,
"ble.ble-feature-phy-management": 1,
"ble.ble-feature-privacy": 1,
"ble.ble-feature-secure-connections": 1,
"ble.ble-feature-security": 1,
"ble.ble-feature-signing": 1,
"ble.ble-feature-whitelist": 1,
"ble.ble-role-broadcaster": 1,
"ble.ble-role-central": 1,
"ble.ble-role-observer": 1,
"ble.ble-role-peripheral": 1,
"ble.present": 1
}
}
}
- This topic was modified 4 years, 7 months ago by Kevin.
April 6, 2020 at 16:13 #27839supportKeymasterSorry, this looks like something specific to the particular mbed project/board and not to VisualGDB, and hence is not under our control. Please consider the following resources for help on issues that are not specific to VisualGDB:
- Mbed forums to discuss issues specific to mbed
- StackOverflow for generic programming questions
Also if you can confirm that the problem does not happen when using a command-line debugger (e.g. gdb), but happens with VisualGDB, we can help you understand the differences and configure VisualGDB to match the command line gdb behavior.
-
AuthorPosts
- You must be logged in to reply to this topic.