请教各位高手,怎样将多个不同类型的数据存到flash上,是一个一个的存,还是将数据存到数组再存

2019-08-17 01:54发布

         比如现在我有u8,u16,u32的数据若干个,现在想把他们存到存到flash上,应该怎么存?
     我想到的办法是:
                     1:一个一个的存,但是这样需要给每个变量赋一个地址,读取的时候也得返回来查看每个变量存储的地                            址 ,感觉这样比较麻烦 ,数据多了就分配不过来了;
                     2:定义一个数组,将所有变量的数据存到数组,然后再一次性写入flash,那么这个数组该定义成什么样                           的数据类型来适应u8,u16, u32的数据;


                    3:将这些数据定义成结构体,然后一次性存入flash,但是
                              void STMFLASH_Write(u32 WriteAddr,u16  *pBuffer,u16 NumToWrite);        
                              void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead);  
                              这两个函数是否可以写入读出结构体,尤其结构体里有不同的数据类型会不会数据丢失;


                                             求大神帮忙解答一下,谢谢啦



                              
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Acuity
1楼-- · 2019-08-17 03:23
全然向你 发表于 2017-7-10 09:22
放到结构体的话,u8和u32的数据需要怎么处理啊,求教

放到结构体上,读取/写入是将结构体强制转换为函数buff形参的类型,如:定义一个机构体 struct_obj,STMFLASH_Read(0,(u16)&struct_obj,sizeof(struct_obj)/2)。但是一般情况下我们自己编写输入的buff形参是u8/char型(8位),方便单个字节操作。 另外:注意结构体内存对齐规则,不要浪费部分内存和存储空间了,强制转换为1字节对齐!
FreeRTOS
2楼-- · 2019-08-17 09:06
放到结构体再存
rindy
3楼-- · 2019-08-17 13:11
 精彩回答 2  元偷偷看……
全然向你
4楼-- · 2019-08-17 18:53
FreeRTOS 发表于 2017-7-10 08:19
放到结构体再存

放到结构体的话,u8和u32的数据需要怎么处理啊,求教
全然向你
5楼-- · 2019-08-17 19:19
Acuity 发表于 2017-7-10 09:40
放到结构体上,读取/写入是将结构体强制转换为函数buff形参的类型,如:定义一个机构体 struct_obj,STMF ...

谢谢你的回答,非常详细,现在还有两个问题,
1如果将buffer结构体强制转换成u16类型会不会数据丢失?
2  如果buffer转换成u16类型,那么是不是应该两个子节对齐
3如果不对齐的话,除了空间丢失会不会跑飞什么的?😂😂
Acuity
6楼-- · 2019-08-18 00:56
全然向你 发表于 2017-7-10 12:38
谢谢你的回答,非常详细,现在还有两个问题,
1如果将buffer结构体强制转换成u16类型会不会数据丢失?
...

1、不会丢失;
2、结构体保证单个字节对齐就可以了;
3、这个要自己测试下就知道了。
另外:一般自己的函数形参buff是u8/char(1字节),将结构体强制转换为char读写是不会有问题的,从内存存储空间上分析肯定是可行的。
           如ee_24clxx_readbytes(0,(char*)struct_obj,sizeof(struct_obj));
              ee_24clxx_writebytes(0,(char*)struct_obj,sizeof(struct_obj));

一周热门 更多>