ZYNQ基础----使用SD卡保存图片(2)

FATFS文件系统函数

  对于FATFS文件系统的相关函数,在FATFS中,都有详细的介绍和示例代码。链接地址如下:
FATFS 文件系统

1 挂载函数f_mount

  挂载函数用于将SD卡挂载到系统中。在官方网站上挂载函数的描述如下:

参数含义
FATFS * fs文件系统对象的指针
const TCHAR path逻辑驱动器号 “0:/”
BYTE opt操作符: 0在第一次访问时挂载,1强制挂载以检查是否能够正常工作

  在执行任何文件/目录操作之前,需要使用f_mount函数为逻辑驱动器注册文件系统对象。完成此过程后,文件/目录API函数即可开始工作。
在这里插入图片描述

  官方的示例demo如下:可以看到挂载和取消挂载是和文件系统的指针和逻辑驱动号相关的。首先声明一个文件系统指针,然后为其动态开辟空间,开辟完空间后,进行挂载,在之后重新挂载以重新初始化文件系统。最后将取消挂载(将逻辑分区挂载到空,以取消挂载???),最后释放动态开辟的空间。
在这里插入图片描述

2 打开文件f_open

在这里插入图片描述

参数含义
FIL *fp指向空白文件对象的指针
const TCHAR * path指向以空值结尾的字符串的指针,该字符串指定要打开或创建的文件名,例如“img.bmp”
BYTE MODE对文件操作的模式

  其中对文件操作的模式有如下说明。这些操作模式还是比较熟悉的。
在这里插入图片描述
在这里插入图片描述
  看一下示例demo就很容易理解这个函数了。这个示例demo中,又引出了这个对文件的读写的函数,那么接下来就看看这些读写函数。

/* Copy a file "file.bin" on the drive 1 to drive 0 */

int main (void)
{
    FATFS fs0, fs1;      /* Work area (filesystem object) for logical drives */
    FIL fsrc, fdst;      /* File objects */
    BYTE buffer[4096];   /* File copy buffer */
    FRESULT fr;          /* FatFs function common result code */
    UINT br, bw;         /* File read/write count */


    /* Gives work area to each logical drive */
    f_mount(&fs0, "0:", 0);
    f_mount(&fs1, "1:", 0);

    /* Open source file on the drive 1 */
    fr = f_open(&fsrc, "1:file.bin", FA_READ);
    if (fr) return (int)fr;

    /* Create destination file on the drive 0 */
    fr = f_open(&fdst, "0:file.bin", FA_WRITE | FA_CREATE_ALWAYS);
    if (fr) return (int)fr;

    /* Copy source to destination */
    for (;;) {
        f_read(&fsrc, buffer, sizeof buffer, &br);  /* Read a chunk of data from the source file */
        if (br == 0) break; /* error or eof */
        f_write(&fdst, buffer, br, &bw);            /* Write it to the destination file */
        if (bw < br) break; /* error or disk full */
    }

    /* Close open files */
    f_close(&fsrc);
    f_close(&fdst);

    /* Unregister work area prior to discard it */
    f_mount(0, "0:", 0);
    f_mount(0, "1:", 0);

    return (int)fr;
}

3 写文件f_write

参数含义
FIL *fp指向空白文件对象的指针
const void * buff要写入的缓冲buffer
UINT btw要写入的字节数
UINT * bw返回一个写入了多少字节的信息到一个变量中,通过这个指针来传递

  f_write这个函数就将buffefr中的数据,写入到文件中,通过btw(byte write)来指示要写入的数据的长度,通过返回的信号bw(verilog写多了的啥都是信号了哈哈哈哈)来指示写入了多少字节的数据。
在这里插入图片描述
  还要关注函数的返回值,起始就是一个枚举,写入的状态的返回值就下面这机中见名知意了。
在这里插入图片描述

4 读取数据f_read

  读取文件跟写入就是镜像关系了
在这里插入图片描述

5 指针移动函数f_lseek

  该函数能够移动已经打开的文件的读写指针,也可以用来扩充文件。简单来说,就是将指针移动到下次要读写的位置。

参数含义
FIL *fp文件对象
FSIZE_t ofs偏移地址(DWORD(32bit) || QWORD(64bit) )

在这里插入图片描述
在这里插入图片描述

6 文件同步函数f_sync

  文件同步函数能够将cache中的数据刷新到文件中,使用f_sync函数,能够在突发情况出现时,使文件中的数据,得以保存。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值