diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index cad548b6b5acbe4f5967e95efa8f397077de7fb6..cbdc1ca26264ec628767b966eda2e3600afce62d 100644 --- a/components/dfs/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/filesystems/elmfat/dfs_elm.c @@ -172,7 +172,7 @@ int dfs_elm_mkfs(const char *device_name) for (drv = 0; drv < _VOLUMES; drv ++) { dev = disk[drv]; - if (rt_strncmp(dev->parent.name, device_name, RT_NAME_MAX) == 0) + if (dev != RT_NULL && rt_strncmp(dev->parent.name, device_name, RT_NAME_MAX) == 0) { /* 1: no partition table */ /* 0: auto selection of cluster size */ @@ -782,8 +782,14 @@ DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void *buff) *(DWORD *)buff = geometry.block_size/geometry.bytes_per_sector; } else if (ctrl == CTRL_SYNC) + { rt_device_control(device, RT_DEVICE_CTRL_BLK_SYNC, RT_NULL); - + } + else if (ctrl == CTRL_ERASE_SECTOR) + { + rt_device_control(device, RT_DEVICE_CTRL_BLK_ERASE, buff); + } + return RES_OK; } diff --git a/components/dfs/filesystems/elmfat/ffconf.h b/components/dfs/filesystems/elmfat/ffconf.h index fa77b7e28dc5d00b62374fb7a3c093c6b74c7766..3a4fac79362f739099467f55bd68a2150411bfa8 100644 --- a/components/dfs/filesystems/elmfat/ffconf.h +++ b/components/dfs/filesystems/elmfat/ffconf.h @@ -163,8 +163,11 @@ / it can mount only first primaly partition. When it is set to 1, each volume / is tied to the partitions listed in VolToPart[]. */ - +#ifdef RT_DFS_ELM_USE_ERASE +#define _USE_ERASE 1 +#else #define _USE_ERASE 0 /* 0:Disable or 1:Enable */ +#endif /* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command / should be added to the disk_ioctl functio. */ diff --git a/components/dfs/include/dfs_def.h b/components/dfs/include/dfs_def.h index c0fe47fe0c48fc7f333391bbfa0ed09974412480..d467792f2f9887129455491a7deb3605f94bb58f 100644 --- a/components/dfs/include/dfs_def.h +++ b/components/dfs/include/dfs_def.h @@ -198,6 +198,11 @@ #define DFS_SEEK_SET SEEK_SET #define DFS_SEEK_CUR SEEK_CUR #define DFS_SEEK_END SEEK_END +#elif defined(_MSC_VER) +#include +#define DFS_SEEK_SET SEEK_SET +#define DFS_SEEK_CUR SEEK_CUR +#define DFS_SEEK_END SEEK_END #else #define DFS_SEEK_SET 0 #define DFS_SEEK_CUR 1 diff --git a/components/dfs/include/dfs_posix.h b/components/dfs/include/dfs_posix.h index 9627a4fe734813689acc03e0e7d0a56e7a8f80a0..503099cff6ec9ef5fabd88abbb9a71d902f9025a 100644 --- a/components/dfs/include/dfs_posix.h +++ b/components/dfs/include/dfs_posix.h @@ -69,6 +69,8 @@ #if defined(__CC_ARM) #include +#elif defined(_MSC_VER) +#include #else #define SEEK_SET DFS_SEEK_SET #define SEEK_CUR DFS_SEEK_CUR diff --git a/components/dfs/src/dfs_fs.c b/components/dfs/src/dfs_fs.c index 7c319722cd61a719f5597197d69b492b372aba67..f747617e5fc5e0113e4f9b13513eeacbcb747723 100644 --- a/components/dfs/src/dfs_fs.c +++ b/components/dfs/src/dfs_fs.c @@ -400,7 +400,7 @@ int dfs_mkfs(const char *fs_name, const char *device_name) { int index; - /* lock filesystem */ + /* lock file system */ dfs_lock(); /* find the file system operations */ for (index = 0; index < DFS_FILESYSTEM_TYPES_MAX; index++) @@ -420,6 +420,7 @@ int dfs_mkfs(const char *fs_name, const char *device_name) } dfs_unlock(); + rt_kprintf("Can not find the file system which named as %s.\n", fs_name); return -1; } @@ -455,9 +456,15 @@ FINSH_FUNCTION_EXPORT(mkfs, make a file system); void df(const char *path) { + int result; struct statfs buffer; - if (dfs_statfs(path, &buffer) == 0) + if (path == RT_NULL) + result = dfs_statfs("/", &buffer); + else + result = dfs_statfs(path, &buffer); + + if (result == 0) { rt_kprintf("disk free: %d block[%d bytes per block]\n", buffer.f_bfree, buffer.f_bsize); }