Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
elm_fatfs_FAT文件系统
elm FatFS 升级到 R0.14b
1.00
发布于 2021-09-09 17:06:33 浏览:1922
订阅该版
[tocm] ## 前言 今天偶然间想看看 elm 的官网,然后发现了今年的新版本,其中有两个改动比较重要,就触发了我想升级的想法。 > Fixed the file gets dead-locked when f_open() failed with some conditions. (appeared at R0.12a) Fixed f_mkfs() can create wrong exFAT volume due to a timing dependent error. (appeared at R0.12) 需要改动的文件有以下三个。 ### ffconf.h 这个是配置文件,基本上是添加一些从 rtconfig.h 定义的宏进行适配 目标系统默认编码 ```c #define FF_CODE_PAGE 932 ``` 改为 ```c #ifdef RT_DFS_ELM_CODE_PAGE # define FF_CODE_PAGE RT_DFS_ELM_CODE_PAGE #else # define FF_CODE_PAGE 936 #endif ``` 是否启用长文件名,不启用就是 8.3 格式 ```c #define FF_USE_LFN 0 #define FF_MAX_LFN 255 ``` 改为 ```c #if RT_DFS_ELM_USE_LFN #define FF_USE_LFN RT_DFS_ELM_USE_LFN #define FF_MAX_LFN RT_DFS_ELM_MAX_LFN #else #define FF_USE_LFN 0 /* 0 to 3 */ #define FF_MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */ #endif ``` 长文件名编码格式,不启用长文件名时无效 ```c #define FF_LFN_UNICODE 0 ``` 改为 ```c #ifdef RT_DFS_ELM_LFN_UNICODE #define FF_LFN_UNICODE RT_DFS_ELM_LFN_UNICODE /* 0:ANSI/OEM or 1:Unicode */ #else #define FF_LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */ #endif ``` 卷数量 ```c #define FF_VOLUMES 1 ``` 改为 ```c #ifdef RT_DFS_ELM_DRIVES #define FF_VOLUMES RT_DFS_ELM_DRIVES #else #define FF_VOLUMES 1 #endif ``` 最小最大块支持 ```c #define FF_MIN_SS 512 #define FF_MAX_SS 512 ``` 改为 ```c #define FF_MIN_SS 512 #ifdef RT_DFS_ELM_MAX_SECTOR_SIZE #define FF_MAX_SS RT_DFS_ELM_MAX_SECTOR_SIZE #else #define FF_MAX_SS 512 /* 512, 1024, 2048 or 4096 */ #endif ``` 是否支持 exFAT ```c #define FF_FS_EXFAT 0 ``` 改为 ```c #ifdef RT_DFS_ELM_USE_EXFAT #define FF_FS_EXFAT 1 #else #define FF_FS_EXFAT 0 #endif ``` 可重入已经锁定义 ```c #define FF_FS_REENTRANT 0 #define FF_FS_TIMEOUT 1000 #define FF_SYNC_t HANDLE ``` 改为 ```c #ifdef RT_DFS_ELM_REENTRANT #define FF_FS_REENTRANT 1 /* 0 or 1 */ #else #define FF_FS_REENTRANT 0 /* 0:Disable or 1:Enable */ #endif #define FF_FS_TIMEOUT 1000 #define FF_SYNC_t rt_mutex_t ``` 另外,还有几个特性宏,按照原来的修改成一样的值就可以了。 ### ff.h 添加`“#include
”`头文件引用。 添加如下函数声明。 ```c FRESULT f_seekdir(DIR *dj, int offset); /* Seek in directory */ ``` ### ff.c `f_readdir` 函数实现之后添加 `f_seekdir` 的实现。 ```c FRESULT f_seekdir( DIR *dj, /* Pointer to the open directory object */ int offset /* the seek offset */ ) { int i = 0; if (dir_sdi(dj, 0) != FR_OK || offset < 0) return FR_INT_ERR; while(i < offset) { if(dir_read(dj, 0) != FR_OK || dir_next(dj, 0) != FR_OK) return FR_INT_ERR; i++; } return FR_OK; } ``` 文件末尾添加 `elm_get_vol` 函数实现。 ```c #if FF_VOLUMES > 1 int elm_get_vol(FATFS *fat) { int vol; for (vol = 0; vol < FF_VOLUMES; vol ++) { if (FatFs[vol] == fat) return vol; } return -1; } #endif ``` ## 结尾 只修改这三个文件,覆盖掉原来的就可以,其它的文件都可以原样不动(建议把其它几个文件也复制过去)。 编译项目,完美通过。
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
出出啊
恃人不如自恃,人之为己者不如己之自为也
文章
43
回答
1517
被采纳
342
关注TA
发私信
相关文章
1
请问谁有用过elm fatfs挂在 nand flash 的经验
2
STM32F413 SD 卡写入速度提升方法
3
W25Q128spi flash的elm挂载失败
4
为什么在DFS中管FATFS叫elm-fat文件系统?
5
W25Q128创建的ELM文件系统掉电丢失
6
初始化elm文件系统时报错空间不足,挂载片外flash文件系统时失败。
7
W25QXX挂载elm文件系统的分区小于512KB时你们成功了吗
8
dfs上打开文件 open 操作返回 -19
9
在rt-rthread v4.0.1版本中,读sd卡或u盘崩溃问题
10
elmfat写数据长度大于512字节,系统hard fault
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部