From 0e82a5b821ad347e9586b7cf8f22af09f961e8e6 Mon Sep 17 00:00:00 2001 From: Urey Date: Fri, 26 May 2017 21:02:59 +0800 Subject: [PATCH 1/2] fix f_mount when mount more fats --- components/dfs/filesystems/elmfat/dfs_elm.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index a73125e81..4ace5afd5 100644 --- a/components/dfs/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/filesystems/elmfat/dfs_elm.c @@ -28,6 +28,7 @@ * 2014-01-26 Bernard Check the sector size before mount. * 2017-02-13 Hichard Update Fatfs version to 0.12b, support exFAT. * 2017-04-11 Bernard fix the st_blksize issue. + * 2017-05-26 Urey fix f_mount error when mount more fats */ #include @@ -42,7 +43,7 @@ #include #include -static rt_device_t disk[_VOLUMES] = {0}; +volatile static rt_device_t disk[_VOLUMES] = {0}; static int elm_result_to_dfs(FRESULT result) { @@ -114,11 +115,13 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d FRESULT result; int index; struct rt_device_blk_geometry geometry; + char logic_nbr[2] = {'0',':'}; /* get an empty position */ index = get_disk(RT_NULL); if (index == -1) return -DFS_STATUS_ENOENT; + logic_nbr[0] = '0' + index; /* save device */ disk[index] = fs->dev_id; @@ -140,7 +143,7 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d } /* mount fatfs, always 0 logic driver */ - result = f_mount(fat,"", (BYTE)index); + result = f_mount(fat,(const TCHAR*)logic_nbr, 1); if (result == FR_OK) { char drive[8]; @@ -150,7 +153,7 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d dir = (DIR *)rt_malloc(sizeof(DIR)); if (dir == RT_NULL) { - f_mount(RT_NULL,"",(BYTE)index); + f_mount(RT_NULL,(const TCHAR*)logic_nbr,1); disk[index] = RT_NULL; rt_free(fat); return -DFS_STATUS_ENOMEM; @@ -168,7 +171,7 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d } __err: - f_mount(RT_NULL, "", (BYTE)index); + f_mount(RT_NULL, (const TCHAR*)logic_nbr, 1); disk[index] = RT_NULL; rt_free(fat); return elm_result_to_dfs(result); From 2426efe6b785742e36e7d48f2c4ad11361047d81 Mon Sep 17 00:00:00 2001 From: Urey Date: Fri, 26 May 2017 21:05:10 +0800 Subject: [PATCH 2/2] delete volatile --- components/dfs/filesystems/elmfat/dfs_elm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index 4ace5afd5..443ce5bb0 100644 --- a/components/dfs/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/filesystems/elmfat/dfs_elm.c @@ -43,7 +43,7 @@ #include #include -volatile static rt_device_t disk[_VOLUMES] = {0}; +static rt_device_t disk[_VOLUMES] = {0}; static int elm_result_to_dfs(FRESULT result) {