硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6827|回复: 3
收起左侧

[FatFs] V0.10b学习笔记---函数f_read和f_write

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2014-6-7 15:30:21 | 显示全部楼层 |阅读模式
函数f_read:
1.png

函数f_write:
1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-7 15:55:03 | 显示全部楼层
应用笔记:
1.  在读操作过程中,一旦*br < btr 则读/写指针到达了文件结束位置.
2. 在写操作过程中,一旦*bw < btw,则意味着该卷已满.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-7 18:52:50 | 显示全部楼层
函数实例:
/*
*********************************************************************************************************
*    函 数 名: Test_f_readwrite
*    功能说明: f_read和f_write函数测试
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
uint8_t Test_f_readwrite(void)
{
    FRESULT fr, result;
    FATFS fs;
    FIL fsrc, fdst;
    UINT br, bw;
    BYTE buffer[4096];   /* File copy buffer */
    float FinishPecent;
    uint32_t Count = 0;


   
    /* 第1步:先挂载文件系统*********************************************************************/
    result = f_mount(&fs, "1:", 1);    /* Mount a logical drive */
    if (result != FR_OK)
    {
        printf("挂载文件系统失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("挂载文件系统成功 (%s)\\r\\n", FR_Table[result]);
    }
   
    /* 第2步:打开两个文件********************************************************************/
    fr = f_open(&fsrc, "1:/txt/nel.txt", FA_OPEN_EXISTING | FA_READ);
    if (fr != FR_OK)
    {
        printf("打开失败 (%s)\\r\\n", FR_Table[fr]);
    }
    else
    {
        printf("打开成功 (%s)\\r\\n", FR_Table[fr]);
    }


    fr = f_open(&fdst, "1:/txt/nel1.txt", FA_CREATE_ALWAYS | FA_WRITE);
    if (fr != FR_OK)
    {
        printf("打开失败 (%s)\\r\\n", FR_Table[fr]);
    }
    else
    {
        printf("打开成功 (%s)\\r\\n", FR_Table[fr]);
    }
   
    Count = 0;
    FinishPecent = 0.0f;
   
    /* 第3步:将文件nel.txt中的内容复制到nel1.txt里面****************************************/
    for (;;)
    {
        fr = f_read(&fsrc, buffer, sizeof buffer, &br);    /* 从源文件中读4K数据 */
                                                           /* 串口打印复制率 */
        Count = Count + 1;
        FinishPecent = (float)(Count* 4096) / fsrc.fsize;
        printf("错误类型 = %s 当前已经复制%.2f     \\r", FR_Table[fr], FinishPecent);


        if (fr || br == 0) break;                         /* 出现错误或者已经读完 */


        
        fr = f_write(&fdst, buffer, br, &bw);            /* 从源文件读出的内容写入多目的文件中 */
        if (fr || bw < br) break;                        /* 写入出错或者磁盘已满 */
    }
   
    printf("\\r\\n");                                      /* 换行 */


    /* 关闭打开的两个文件 */
    f_close(&fsrc);
    f_close(&fdst);


   
    /* 最后一步:卸载文件系统 */
    result  = f_mount(NULL, "1:", 1);
    if (result != FR_OK)
    {
        printf("卸载文件系统失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("卸载文件系统成功 (%s)\\r\\n", FR_Table[result]);
    }
}
实际测试结果:
1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-7 18:54:56 | 显示全部楼层
函数源码框架简易分析:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 16:53 , Processed in 0.225620 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表