What you have is a flash writing function that will write a byte, word, or double word.
If you want to write your structure to flash the simplest way is to view it as a buffer of bytes or words as long as you read it back the same way on the same platform (and with the same C compiler and compile options). Why the same platform? Because different computer platforms can have a different byte ordering for multi-byte values. Why the same compiler and compiler options? Because a different compiler or different options might pack the data in a struct differently.
So with that in mind, and keeping in mind there's a lot of details you haven't provided regarding how your flash writer should be called, your code might look like this to copy the structure to flash:
DataLogTypeDef my_data;
...
int i;
uint8_t *data_p = &my_data;
flash_address = //put first flash address here
for ( i = 0; i < sizeof(DataLogTypeDef); i++, data_p++, flash_address++ )
HAL_FLASH_Program(type_byte, flash_address, *data_p);
I don't know what the values are for the first two arguments, so I just put type_byte
and flash_address
. I'm also assuming flash address is an integer form and is a byte address.
If you want to read the structure back, it might look something like this:
// Initialize i, data_p, and flash_address first
for ( i = 0; i < sizeof(DataLogTypeDef); i++, data_p++, flash_address++ )
*data_p = Flash_read(flash_address);
sizeof(DataLogTypeDef)
bytes of information, and you read it back into a struct in the same way you wrote it and on the same platform (to avoid portability issues). In other words, treat it as a simple block of data. – lurkerDataLogTypeDef my_data;
then you would write a block of memory to flash from address&my_data
and that block would besizeof(DataLogTypeDef)
bytes long. Read it back the same way on the same platform and you should be fine. – lurkerwrite_flash(from_address, to_address, number_of_bytes)
you would just call,write_flash(&my_data, flash_address, sizeof(DataLogTypeDef))
. – lurker