论坛元老
 
- 积分
- 6666
- 金钱
- 6666
- 注册时间
- 2015-8-25
- 在线时间
- 1035 小时
|
发表于 2019-12-5 10:28:50
|
显示全部楼层
若是你的程序是想起来要存储一个数据就马上存一个,过一会又要存储另一个又马上存储一个。完全是随心所欲的想起来要存就存,完全是来一个存一个,也不知道哪一个先来,也不知道会有多少数据要存,那我这方法肯定不行,因为你就没有办法组织你要存储的数据,同时若你的数据太多flash也不够你用。
我的意思是程序已经确定了要存储那些数据的情况下,组织在结构体中存储在flash中的地址 x 处,你要读取哪个变量就用这个变量在结构体的偏移量+ x 去读取flash,
#pragma pack(push,1)
struct test{
unsigned char a;
unsigned short b;
unsigned int c;
};
#pragma pack(pop)
#define FPOS(type,field) ((unsigned int)&((type *)0)->field) //得到成员的偏移
#define FSIZ(type,field) sizeof(((type *)0)->field) //得到成员的大小
现在把一个struct test存到falsh的100地址处,你要用a,就读100处a的大小字节数据就行了,用b就读100+b的偏移处b的大小字节就行。 |
|