• 物联网工程师开发服务平台

MiCO 文件系统 APIs

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。MiCO 为开发者提供在 flash 上进行文件操作的功能,包括:文件创建,读写,关闭,查找,存储等。MiCO 文件系统功能 API 接口包括:

  • f_open: 打开或创建一个文件
  • f_close: 关闭一个打开的文件
  • f_read: 读文件
  • f_write: 写文件
  • f_forward: 读取文件数据并将其转发到数据流设备
  • f_lseek: 移动一个文件对象的文件指针
  • f_truncate: 截断文件
  • f_syns: 冲洗一个写文件的缓存信息
  • f_opendir: 打开一个已存在的目录,并为后续的调用创建一个目录对象
  • f_closedir: 关闭一个打开的目录
  • f_readdir: 读取一个目录项
  • f_findfirst: 寻找第一个文件
  • f_findnext: 寻找下一个文件
  • f_mkdir: 创建一个子目录
  • f_unlink: 删除一个存在的文件或目录
  • f_rename: 重命名或移动一个文件或目录
  • f_stat: 获取文件状态
  • f_chmod: 修改一个文件或目录的属性
  • f_utime: 修改一个文件或目录的时间戳
  • f_chdir:改变当前驱动器
  • f_getcwd: 获取当前目录
  • f_getfree: 获取驱动器上,空闲簇的数目
  • f_getlabel: 获取卷标
  • f_setlabel: 获取文件状态
  • f_mount: 安装或卸载一个逻辑驱动器
  • f_mkfs: 在卷标中创建一个文件系统
  • f_fdisk: 拆分一个逻辑驱动器为多个分区
  • f_putc: 向文件中放入一个字符
  • f_puts: 向文件中放入一个字符串
  • f_printf: 向文件中放入一个格式化的字符串
  • f_gets: 从文件中获取一个字符串

更详细的 API 参数及返回值说明,可参考: doxygen 文档,具体示例代码查看 MiCO SDK 中 demo。

示例代码

示例实现:

  • 创建文件:MiCO.txt,数据:hello MiCO!,将文件写入flash;
  • 读出文件:MiCO.tex 中的的数据,并将数据log输出打印。

fatfs.c

#include "mico.h"
#include "ff_gen_drv.h"
#include "sflash_diskio.h"

#define os_fatfs_log(M, ...) custom_log("FATFS", M, ##__VA_ARGS__)

FATFS SFLASHFatFs;      /* File system object for flash disk logical drive */
FIL SFLASHFile;         /* File object */
char SFLASHPath[4];     /* SFLASH logical drive path */

void test_fatfs( )
{
    FRESULT err;
    filesystem_info fatfs_info;
    uint32_t byteswritten, bytesread;
    char filename[] = "MiCO.txt";
    uint8_t wtext[] = "hello MiCO!";
    uint8_t rtext[100];
    FATFS_LinkDriver( &SFLASHDISK_Driver, SFLASHPath );

    err = f_mount( &SFLASHFatFs, (TCHAR const*) SFLASHPath, 0 );
    require_noerr( err, exit );

    do
    {
        fatfs_info = fatfs_get_info( (uint8_t*) SFLASHPath );
        if ( fatfs_info.total_space == 0 )
        {
            os_fatfs_log("filesystem free space is %d, need format", fatfs_info.total_space);
            os_fatfs_log("start format filesystem");
            err = f_mkfs( (TCHAR const*) SFLASHPath, 0, _MAX_SS );
        }
    } while ( fatfs_info.total_space == 0 );

    os_fatfs_log("filesystem total space is %dKB, free space is %dKB", fatfs_info.total_space, fatfs_info.free_space);

    err = f_open( &SFLASHFile, filename, FA_CREATE_ALWAYS | FA_WRITE );
    require_noerr( err, exit );

    err = f_write( &SFLASHFile, wtext, sizeof(wtext), (void *) &byteswritten );
    if ( (byteswritten == 0) || (err != FR_OK) )
    {
        os_fatfs_log("fatfs write error %d", err);
        goto exit;
    }

    os_fatfs_log("fatfs write file, name:%s, data:%s", filename, wtext);

    err = f_close( &SFLASHFile );
    require_noerr( err, exit );

    err = f_open( &SFLASHFile, filename, FA_READ );
    require_noerr( err, exit );

    err = f_read( &SFLASHFile, rtext, sizeof(rtext), (void *) &bytesread );
    if ( (bytesread == 0) || (err != FR_OK) )
    {
        os_fatfs_log("fatfs read error %d", err);
        goto exit;
    }

    os_fatfs_log("fatfs read file, name:%s, data:%s", filename, rtext);

    err = f_close( &SFLASHFile );
    require_noerr( err, exit );

exit:
    FATFS_UnLinkDriver( SFLASHPath );
}  


int application_start( void )
{
    test_fatfs( );
    return 0;
}  
文本导读目录