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
1楼-- · 2019-08-14 06:30
存进去的话,可以使用指针来操作

比如:struct User  *user1  ;

u8 *p;
p=(U8*)user1;      
在使用单字节写入时候     write_data(*p++);   这种写法是 把新的指针指向结构体的初始位置

然后按照u8类型进行存储。p++每次偏移一个字节。不过需要注意的是,你不能越界了,也就是循环写入的次数最多时sizeof(struct User);

读出来就好办了。先放到一个buff里面   然后再赋值到各个变量。
rindy
2楼-- · 2019-08-14 10:30
aiyeba 发表于 2017-9-2 11:52
存进去的话,可以使用指针来操作

比如:struct User  *user1  ;

嗯嗯,就是再想问一下用你这种方式读出来的时候都存放到一个buf中,那怎么一次给结构体赋值呢,因为结构体各个成员变量都不一样有可能,包括长度什么的
Acuity
3楼-- · 2019-08-14 13:26
 精彩回答 2  元偷偷看……
rindy
4楼-- · 2019-08-14 16:23
Acuity 发表于 2017-9-2 12:20
[mw_shl_code=c,true]//flash 操作函数
void write_flash(int write_addr,char *write_buff,int write_siz ...

感觉这个意思是不是就是把整个结构体数组看成一个大数组,写也是从开始地址一个字节一个字节的写到flash,读也是一个字节一个字节的读出来然后从开始地址一个个把读出来的放进去
Acuity
5楼-- · 2019-08-14 17:42
1、可以这么通俗地理解,flash不支持单字节操作吧,一般是整页或者块操作;
2、专业解析是计算机内存存储原则,不管是什么变量、结构体(自定义的、C标准的。。。)等,使用时,本质是获取系统的一段内存(1字节、2字节、n字节等),然后操作内存内存放的内容,指针就表示这段内存的地址,理解这个了,指针也理解了。
Acuity
6楼-- · 2019-08-14 20:23
rindy 发表于 2017-9-2 12:06
嗯嗯,就是再想问一下用你这种方式读出来的时候都存放到一个buf中,那怎么一次给结构体赋值呢,因为结构 ...

这样的操作方式必须强制结构体单字节内存对齐,否则用一个char(uchar)类型的buff操作会导致数据不正确。

一周热门 更多>