这是stm32h7汉字显示实验把一个结构体内的数据写入一个flash:
W25QXX_Write((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo)); //保存字库信息
因为c语言一个结构体的数据(成员)在内存中式顺序连续存放的,那么我们只要知道这个结构体的首地址,就可以得到这个结构体变量的所有内容,然后写入外存(flash)指定的地址(FONTINFOADDR这是个宏,就是代表个十六进制数的地址)即可
这样flash中的数据就跟内存中一一对应了
同理,读取就是这样,当然提前malloc了ftinfo这个结构体变量了,在内存中已经占空间了
W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo))
如果是把结构体保存到外部sd中(上文件系统的)呢,其实也是一样的,因为一个文件中的数据也是顺序存储的
下面的代码都是来自视avi频播放实验程序
res=f_read(favi,pbuf,AVI_VIDEO_BUF_SIZE,&nr);//开始读取
FRESULT f_read (
FIL* fp, /* Pointer to the file object */ 其实就是知道了一个文件名就可以
void* buff, /* Pointer to data buffer */
UINT btr, /* Number of bytes to read */
UINT* br /* Pointer to number of bytes read */
) // 这是文件读取库函数的原型
buf=pbuf;
avihheader=(AVIH_HEADER*)(buf);
现在就可以这样使用从文件里面读取出来的一串数据了,强行转为结构体类型,然后就可以使用了
avix.SecPerFrame=avihheader->SecPerFrame; //得到帧间隔时间
avix.TotalFrame=avihheader->TotalFrame; //得到总帧数
写文件也是一样,这里不说了