一段文件(或者flash芯片)数据如何加载进一个c语言结构体内

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎联系我qq2488890051 https://blog.csdn.net/kangkanglhb88008/article/details/89522109

这是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;                        //得到总帧数  

写文件也是一样,这里不说了

猜你喜欢

转载自blog.csdn.net/kangkanglhb88008/article/details/89522109