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

FDS: Saving my records

NRF52 DK on SDK 12.2 (using armGCC)

I have the FDS example from GITHUB working - it shows it is writing and reading the example data (0xDEADBEEF and 0xBAADF00D) fine. I want to save my own data as a record instead of the data in the example and I need assistance. Below are the variables that I need to save so I can recover them after a power outage or reboot.

uint8_t		currentSetting;
int16_t		photocellThreshold;
uint16_t	pwmValue;
bool		powerState;
uint32_t	remoteMode1;
uint32_t	remoteMode2;
uint32_t	remoteMode3;

I am not sure if I should have a separate record for each variable or if I should write all as 1 "chunk" of data. Which is better?

My problem is how do I save those different data types into FDS?

How do I recover the settings after reboot?

Also, If the user changes the setting or PWM value for instace, I will use a timer and after 20 seconds of no setting changes, I will update the data to FDS. How can I update that changed information back into FDS?

Can someone assist me? I appreciate any help!

Thanks, Bryan

Parents
  • It would be better to save it as 1 chunk. Writing/Erasing is slow. It is done in background. So you wouldn't want to have to many of them. Also you cannot write to the same location of flash without erasing it first.

  • Roger Thank you so much! I am able now to put my variables into FDS!!!! Now when I read them back using the example code,:

    while (fds_record_find(FILE_ID, REC_KEY, &record_desc, &ftok) == FDS_SUCCESS)
    {
    	fds_record_open(&record_desc, &flash_record);
    	printf("Found Record ID = %lu\r\n",record_desc.record_id);
    	printf("Data = ");
    	data = (uint32_t *) flash_record.p_data;
    	for (uint8_t i=0;i<flash_record.p_header->tl.length_words;i++)
    	{
    		printf("%lu ",data[i]);
    	}
    	printf("\r\n");
    	fds_record_close(&record_desc);
    }
    

    I get in my terminal window: Data = 262144010 65556 4401217 12345678 77777777

    My actual data was:

    myData.currentSetting=10; myData.photocellThreshold=4000; myData.powerState=1; myData.pwmValue=20; myData.remoteMode1=4401217; myData.remoteMode2=12345678; myData.remoteMode3=77777777;

    How can I read the data from FDS back into the struct format above? Thanks!!!!

Reply
  • Roger Thank you so much! I am able now to put my variables into FDS!!!! Now when I read them back using the example code,:

    while (fds_record_find(FILE_ID, REC_KEY, &record_desc, &ftok) == FDS_SUCCESS)
    {
    	fds_record_open(&record_desc, &flash_record);
    	printf("Found Record ID = %lu\r\n",record_desc.record_id);
    	printf("Data = ");
    	data = (uint32_t *) flash_record.p_data;
    	for (uint8_t i=0;i<flash_record.p_header->tl.length_words;i++)
    	{
    		printf("%lu ",data[i]);
    	}
    	printf("\r\n");
    	fds_record_close(&record_desc);
    }
    

    I get in my terminal window: Data = 262144010 65556 4401217 12345678 77777777

    My actual data was:

    myData.currentSetting=10; myData.photocellThreshold=4000; myData.powerState=1; myData.pwmValue=20; myData.remoteMode1=4401217; myData.remoteMode2=12345678; myData.remoteMode3=77777777;

    How can I read the data from FDS back into the struct format above? Thanks!!!!

Children
No Data
Related