storing string's on flash
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-12 12:56 PM - edited ‎2024-04-12 12:57 PM
hi,
I initialized string array with strings and type cast to uint32_t to store in flash memory as uint32_t. And then read the array as uint32_t. I update one of the string of the array and type cast uint32_t to store that array in Flash memory back. But whenever I update string value and store on the flash memory. The string has strange characters on it. If you see the string that I am trying to store in string array "21.76".
But in flash memory showing as "yyyy6.Its not storing properly.If you see the picture below in memory browser its showing as "yyyy6".
I dont know why?. Any suggestions.
- Labels:
-
STM32F4 Series
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-12 1:18 PM
Suppose someone asks you this question. What would you say? Do you have enough information to help him?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-12 2:20 PM
>>Any suggestions.
Doing it wrong, show code, use the </> code pasting tools if you in-line in post, or link to github project illustrating.
Show enough to be coherent, not selective snippets.
Looks like you're not writing the first word.
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-12 11:46 PM - edited ‎2024-04-13 12:10 AM
Here is the code.
if(strncmp((char*)ptr, "tempc", 5) == 0)
{
MY_FLASH_SetSectorAddrs(6, 0x08040000);
if (strncmp((char*)ptr, "tempc1", 6) == 0)
{
Counter = 0;
}
MY_FLASH_ReadN(0, (uint32_t*)CStore, sizeof(Ctore),DATA_TYPE_32);
HAL_Delay(100);
memset(CStore[Counter], '\0', 10);
for(char *str =strtok((char*)ptr, " "); str; str = strtok(NULL, " "))
{
if(strncmp((char*)str, "tempc", 5) == 0)
continue;
strncpy(CStore[Counter], str, strlen(str));
Counter++;
}
MY_FLASH_WriteN(0, (uint32_t*)CStore, sizeof(CStore), DATA_TYPE_32);
HAL_Delay(100);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-12 11:53 PM
Flash possition can be writed only once. For next write require erase before. And your code is chaos of pointers.
Read and apply EEPROM emulation code for STM. an4894-how-to-use-eeprom-emulation-on-stm32-mcus-stmicroelectronics.pdf
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-14 4:24 AM
Thank you for the reply. For the next write I am doing erase before.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-14 6:16 AM
Aghh seems with you can only communicat ChatGPT. Show code
MY_FLASH_WriteN
or better complete relevant code.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-14 9:29 AM
Sure no problem. MY_FLASH_WriteN comes from this. I am using header files on my code.
https://github.com/MYaqoobEmbedded/STM32-Tutorials/blob/master/Tutorial%2030%20-%20FLASH%20Memory/MY_FLASH.c
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-14 9:47 AM
Declarations ptr CStore ???
memset(CStore[Counter], '\0', 10);
is absurd if CStore is char array etc.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2024-04-14 10:28 AM
char CStore array contain old string after read from MY_FLASH_ReadN, I just wanted to clear out that string with memset and write the new string to the CStore array. And then store in flash, thats my thinking.
