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条回答
aiyeba
2019-08-14 23:16
rindy 发表于 2017-9-2 12:06
嗯嗯,就是再想问一下用你这种方式读出来的时候都存放到一个buf中,那怎么一次给结构体赋值呢,因为结构 ...

感觉你对指针的理解不是很够哦。你怎么说也是一个太阳了。

如另外一个老铁和你说的。flash操作都是页操作或者块操作。不过底层也是一个个字节写入的,(可以参考以下原子哥的EEPROM来理解一下)。这种函数的接口往往给的是buff,但是如果是结构体呢?其实用强制转换就可以了。

可以这么理解,结构体里面有u8、u16、u32的和数组的各种类型的。但是最基本的还是u8
如果你flash里面存的数据刚好每一个字节都是和我的结构体对齐,那么数据就不会乱的。
也就是你按什么类型存的,到时候按什么类型来取就可以了。(地址对齐)
举例说明。flash地址0到6   你存的是  0x11   0x22  0x33   0x44 0x55 0x66 0x77
(特别记住:这7个字节可以是任意类型拆分存进来的)

不同的取法,会得到不同的值。
如果你按照u8来去  那么打印的就是7个字节

如果你按照  u16来取  那么打印的就是0x1122  0x3344  0x5566  0x77??(注意大小端)

u32你自己想咯

这个又怎么理解呢?   u8 buff[7]={0x11,0x22,0x33,0x44,0x55,0x66,0x77};

u16 *p;   p=(u16 *)buff;  printf("0x%04x ",*p++);  这个循环3次就越界了。








一周热门 更多>