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

FDS storing random value when called in ble_evt_handler

Whenever I store my data in Flash using FDS (Flash Data Storage Library) it stores a random value (but fixed) even though I am giving it a value.

I run the same thing in main as follows and it writes the correct value:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//----Writing----
uint32_t data_test = 0x000010EE;
fds_record_t record;
fds_record_desc_t record_desc;
record.file_id = FILE_ID;
record.key = TEST_KEY;
record.data.p_data = &data_test;
record.data.length_words = 1;
fds_record_desc_t desc = {0};
fds_find_token_t tok = {0};
uint32_t *data;
rc = fds_record_find(FILE_ID, TEST_KEY, &desc, &tok);
if (rc == FDS_SUCCESS)
{
rc = fds_record_update(&desc, &record);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

But when I do it in ble_evt_handler, it does not store the value I intend but some other value. Code inside ble_evt_handler:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uint32_t major_flash = 0x00000033;//(p_data[0] & (p_data[1] << 8));;
uint32_t minor_flash = 0x00000033;//(p_data[2] & (p_data[3] << 8));
fds_record_t record;
fds_record_desc_t record_desc;
fds_record_t record_1;
fds_record_desc_t record_desc_1;
record.file_id = FILE_ID;
record.key = TEST_KEY;
record.data.p_data = &minor_flash;//&data_test_1;//0x00000070; //(p_data[0] & (p_data[1] << 8));
record.data.length_words = 1;
fds_record_desc_t desc = {0};
fds_find_token_t tok = {0};
fds_record_desc_t desc_1 = {0};
fds_find_token_t tok_1 = {0};
ret_code_t ret;
ret_code_t rc = fds_record_find(FILE_ID, TEST_KEY, &desc, &tok);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Any leads as to why its storing a garbage value when called in the event handler (its being called in the event handler as when data is written it stores it in the flash aswell)