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

battery_level_char_add() question

This is function definition:

static uint32_t battery_level_char_add(ble_bas_t * p_bas, const ble_bas_init_t * p_bas_init)

This is declaration of the automatic variable inside this function:

uint8_t             initial_battery_level;   // this var is in stack of the function

This its initialisation:

initial_battery_level = p_bas_init->initial_batt_level;

This is how it used:

attr_char_value.p_value   = &initial_battery_level;  // attention: pointer to stack!!!

err_code = sd_ble_gatts_characteristic_add(p_bas->service_handle, &char_md,
                                           &attr_char_value,
                                           &p_bas->battery_level_handles);

Looks very suspicious isn't it?! I don't now what sd_ble_gatts_characteristic_add() does exactly but my assumption is that it will store internaly this pointer to stack, which will become junk as soon as function battery_level_char_add() is completed. Shouldn't it be static uint8_t initial_battery_level ?

Thanks.

Parents Reply Children
Related