This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Code only runs in debugging

Hello,

I have nRF52832 with custom board and using SDK15 with Keil uVISION 5. I am working on beacon example and I have modified it to show battery level. I have done necessary changes for SAADC.

I am getting values too but only when I do step by step debugging in keil.

I have declared a variable static uint16_t battVolt_1 after all #include files. If I do not go with step by step debugging, this variable is not getting the value of ADC.

my main function is(from ble_app_beacon example):

int main(void)
{
    log_init();
    timers_init();
    leds_init();
    power_management_init();
    ble_stack_init();
	update_vbatt();
    advertising_init();

    NRF_LOG_INFO("Beacon example started.");
    advertising_start();
	nrf_gpio_pin_set(LED_2);
		
    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }
}

my update_vbatt function is:

static void update_vbatt(void)
{
    uint16_t vbatt;
    uint16_t battVolt;
    es_battery_voltage_init();
    es_battery_voltage_get(&vbatt); // Get new battery voltage    
    battVolt = (uint16_t)vbatt;
    battVolt_1 = battVolt;             //declared at beginning of code
}

Why is it only working in step by step debug and why not without it? It broadcasts 0x0000 value always when it runs (means not in debug mode)

I am attaching a video too for reference.

Parents
  • Hi,

     

    The es_battery_voltage_saadc library will initially start a conversion, and if you call es_battery_voltage_get() straight after the _init(), it will not be done yet and you will get the default value (0) back.

    Could you try to call es_battery_voltage_get() just before setting it as the manufacturer data in your advertising payload, and see if this works better?

     

    Best regards,

    Håkon

     

Reply
  • Hi,

     

    The es_battery_voltage_saadc library will initially start a conversion, and if you call es_battery_voltage_get() straight after the _init(), it will not be done yet and you will get the default value (0) back.

    Could you try to call es_battery_voltage_get() just before setting it as the manufacturer data in your advertising payload, and see if this works better?

     

    Best regards,

    Håkon

     

Children
Related