atm32怎么方便的将一个结构体存入flash并且原样读写出来

2019-08-14 03:42发布

本帖最后由 rindy 于 2017-9-2 11:53 编辑

假如有这样一个结构体数组,怎么存入flash呢,并且原样读写出来,之前只写过一些简单变量的存储与读写操作,不知道结构体怎么操作
struct User   
{
        char  user_physical[20];
        char  user_custom[20];
        char user_pa[20];
        char user_flag;
};
struct   User      user1[60];//添加60条数据,现在要把这60条结构体数据存放到flash需要怎么操作?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
rindy
2019-08-15 09:12
本帖最后由 rindy 于 2017-9-2 16:54 编辑
aiyeba 发表于 2017-9-2 14:31
感觉你对指针的理解不是很够哦。你怎么说也是一个太阳了。

如另外一个老铁和你说的。flash操作都是页 ...

大虾,这块内容确实自己不怎么扎实(主要之前用得少),这次遇到实际问题了(这次一定要把这块内容啃精了),自己现在也在看这方面的内容,我自己现在是这样一个思路,您看行不行,现在不是struct   User      user1[60];     我定义一个指向结构体数组的指针p,开始地址就是user1[60]的首地址,然后通过这个函数来存入flash,您觉得可以吗

void flashWriteSysData(User *p)//传进来的p已经指向了user1[60]的首地址
{
  u8 i = 0;
  u8 temp = 0;
  for(i=0;i<60;i++)//总共循环60次,因为有60个元素
  {
    for(j=0;j<61;j++)//一个结构体数组元素占61(20+20+20+1)个字节
    {
        //这里就是将每个元素的61个字节依次写入到flash中                

         memcpy(&temp,   *((uint8_t *)p+j),  1);                            //从当前指针指向的结构体元素所在内存中拷贝一个byte        

        FLASH_ProgramByte(SYS_DATA_ADDR,temp);            //写入这个byte

        
SYS_DATA_ADDR=SYS_DATA_ADDR+2;                     //stm32的flash地址必须是2的倍数
         
    }
    p++;
  }
}




一周热门 更多>