硬汉嵌入式论坛

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

[FatFs] V0.10b学习笔记---函数f_open

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2014-6-6 21:40:13 | 显示全部楼层 |阅读模式
1.  函数原型
1.png

2.  参数解释
1.png

3. 函数描述
1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-6 21:53:06 | 显示全部楼层
应用笔记
1.  如果文件被修改了,而没有关闭,那么会造成文件数据崩溃。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-6 21:53:15 | 显示全部楼层
函数实例:

/*
*********************************************************************************************************
*    函 数 名: Test_f_open
*    功能说明: f_open函数测试
*    形    参:无
*    返 回 值: 无
*********************************************************************************************************
*/
void Test_f_open(void)
{
    FRESULT result;
    FATFS fs;
    FIL file;
   
    /* 第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步:先将相应的文件删除,方便后面的测试****************************************************/
    f_unlink("1:/message.txt");
    if (result != FR_OK)
    {
        printf("文件删除失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("文件删除成功 (%s)\\r\\n", FR_Table[result]);
    }


    /* 第3步:参数 FA_READ********************************************************************/
    result = f_open(&file, "1:/message.txt", FA_READ);
   
    if (result != FR_OK)
    {
        printf("FA_READ读文件失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_READ读文件成功 (%s)\\r\\n", FR_Table[result]);
    }
   
    /* 第4步:参数 FA_READ*********************************************************************/
    result = f_open(&file, "1:/message.txt", FA_OPEN_EXISTING);
   
    if (result != FR_OK)
    {
        printf("FA_OPEN_EXISTING打开文件失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_OPEN_EXISTING打开文件成功 (%s)\\r\\n", FR_Table[result]);
    }
   
    /* 第5步:参数 FA_READ | FA_OPEN_EXISTING***************************************************/
    result = f_open(&file, "1:/message.txt", FA_READ | FA_OPEN_EXISTING);
   
    if (result != FR_OK)
    {
        printf("FA_READ | FA_OPEN_EXISTING失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_READ | FA_OPEN_EXISTING成功 (%s)\\r\\n", FR_Table[result]);
    }
   
    /* 第6步:参数 FA_READ | FA_OPEN_EXISTING****************************************************/
    result = f_open(&file, "1:/message.txt", FA_READ | FA_OPEN_ALWAYS);
   
    if (result != FR_OK)
    {
        printf("FA_READ | FA_OPEN_ALWAYS失败 (%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_READ | FA_OPEN_ALWAYS成功 (%s)\\r\\n", FR_Table[result]);
    }
   
    /* 创建成功后需要将其关闭 */
    f_close(&file);
   
    /* 第7步:参数 FA_CREATE_NEW****************************************************/
    result = f_open(&file, "1:/message.txt", FA_CREATE_NEW);
   
    if (result != FR_OK)
    {
        printf("FA_CREATE_NEW(%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_CREATE_NEW(%s)\\r\\n", FR_Table[result]);
    }
   
    /* 第8步:参数 FA_CREATE_ALWAYS ****************************************************/
    result = f_open(&file, "1:/message.txt", FA_CREATE_ALWAYS);
   
    if (result != FR_OK)
    {
        printf("FA_CREATE_ALWAYS(%s)\\r\\n", FR_Table[result]);
    }
    else
    {
        printf("FA_CREATE_ALWAYS(%s)\\r\\n", FR_Table[result]);
    }


   
    /* 最后一步:卸载文件系统 */
    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-6 21:53:28 | 显示全部楼层
函数源码框架简易分析:
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-6-6 21:54:38 | 显示全部楼层
上面三个楼占上,防止大家意外回复,要不我没办法整理帖子了。
回复

使用道具 举报

13

主题

87

回帖

126

积分

初级会员

积分
126
发表于 2014-8-22 10:46:59 | 显示全部楼层
当使用长文件名的时候 就需要强制转换文件名了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-8-22 18:04:57 | 显示全部楼层

回 abcdotaabc 的帖子

abcdotaabc:当使用长文件名的时候 就需要强制转换文件名了 (2014-08-22 10:46) 
开启长文件名的宏即可。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2014-12-29 14:40:17 | 显示全部楼层
open一个文件后,在什么情况下close?
如果open失败,需要close吗?
如果read文件,需要close吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-12-29 14:43:42 | 显示全部楼层

回 waterx3 的帖子

waterx3:open一个文件后,在什么情况下close?
如果open失败,需要close吗?
如果read文件,需要close吗?

 (2014-12-29 14:40) 
最好使用完了就close。open失败或者read文件失败最好也close一下,防止不必要的麻烦,因为我没有看过源码,理论上可能不需要,因为文件没有打开成功,所以就无需关闭。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2014-12-29 14:55:29 | 显示全部楼层
谢谢你的回复。还有个问题,假如我的文件系统只有一个文件用来保存参数,是不是可以在初始化的时候只挂载一次?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
 楼主| 发表于 2014-12-30 15:27:00 | 显示全部楼层

回 waterx3 的帖子

waterx3:谢谢你的回复。还有个问题,假如我的文件系统只有一个文件用来保存参数,是不是可以在初始化的时候只挂载一次? (2014-12-29 14:55) 
挂载的话,仅挂载一次就行。
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-2-16 16:54:35 | 显示全部楼层
[s:151]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 17:35 , Processed in 0.208064 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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