硬汉嵌入式论坛

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

[FatFs] 文件系统在freertos上的应用,使能可重入,系统卡死。

[复制链接]

11

主题

68

回帖

198

积分

初级会员

积分
198
发表于 2017-9-13 15:36:42 | 显示全部楼层 |阅读模式
        我的方案是通过插入usb后将SPIflash里面的文件复制到usb中,裸机时可正确执行,但是开启freertos功能后,系统卡死,发现使能_FS_REENTRANT,造成的问题,去掉可重入就能正常运行,跟踪发现在unlock函数这里。还有查了关于文件可重入问题,这里:_FS_REENTRANT选项可以切换FatF模块本身的重入(线程安全)。 请注意,不管此选项,文件访问不同的卷始终是重入的,并且卷控制功能f_mount(),f_mkfs()和f_fdisk()函数始终不会重入。 只有文件/目录访问相同的卷才受此功能的控制。文件挂载不重入什么意思,我单独使用spiflsh的时候是使能可重入的,加上usb后就不能了,卷增加对文件挂载有影响吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2017-9-14 00:31:31 | 显示全部楼层
对于FatFS的多任务,有一个专门的syscall.c文件,需要在底层做多任务支持。
回复

使用道具 举报

11

主题

68

回帖

198

积分

初级会员

积分
198
 楼主| 发表于 2017-9-14 09:43:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:对于FatFS的多任务,有一个专门的syscall.c文件,需要在底层做多任务支持。 (2017-09-14 00:31) 
我看了,只要_FS_REENTRANT = 1;就开始申请一个信号量,对各个文件进行上锁和解锁,我卡就卡死死在这里,能上锁不能解锁,syscall.c文件是系统自动生成的,我之前只有一个卷的时候是开启了可重入的功能,没出现问题,现在出问题了,实在查不出什么原因,usb和spiflash的读写buff也不一样。
回复

使用道具 举报

11

主题

68

回帖

198

积分

初级会员

积分
198
 楼主| 发表于 2017-9-14 09:45:00 | 显示全部楼层

回 eric2013 的帖子

eric2013:对于FatFS的多任务,有一个专门的syscall.c文件,需要在底层做多任务支持。 (2017-09-14 00:31) 
您有这方面的例子 吗?参考一下。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2017-9-14 22:38:39 | 显示全部楼层

回 thinkself 的帖子

thinkself:我看了,只要_FS_REENTRANT = 1;就开始申请一个信号量,对各个文件进行上锁和解锁,我卡就卡死死在这里,能上锁不能解锁,syscall.c文件是系统自动生成的,我之前只有一个卷的时候是开启了可重入的功能,没出现问题,现在出问题了,实在查不出什么原因,usb和spiflash的读写buff .. (2017-09-14 09:43) 
你想,fatfs并不知道你的信号量具体是什么样的
回复

使用道具 举报

11

主题

68

回帖

198

积分

初级会员

积分
198
 楼主| 发表于 2017-9-15 09:42:28 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:你想,fatfs并不知道你的信号量具体是什么样的 (2017-09-14 22:38) 
是freertos下自动生成的,是freertos下的信号量,貌似还和sector的最大最小设置有关
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2017-9-15 10:23:47 | 显示全部楼层

回 thinkself 的帖子

thinkself:您有这方面的例子 吗?参考一下。 (2017-09-14 09:45) 
FatFS已经做好FreeRTOS的支持了,你添加进去后,使能相应宏定义就行,你试试看。
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2017-11-15 16:31:43 | 显示全部楼层
解决了吗?我也有遇到类似的问题,是fatfs和USB两个任务读写同一磁盘冲突造成的。应该不是重入的问题,重入问题仅仅针对fatfs本身的访问,配置好syscall就可以。
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2017-11-15 16:35:55 | 显示全部楼层
再有,多卷时开启重入,每个卷都应该有自己独有的信号量,存在各自的FATFS结构体中
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2017-11-16 01:06:44 | 显示全部楼层

回 librazorro 的帖子

librazorro:解决了吗?我也有遇到类似的问题,是fatfs和USB两个任务读写同一磁盘冲突造成的。应该不是重入的问题,重入问题仅仅针对fatfs本身的访问,配置好syscall就可以。 (2017-11-15 16:31)
是的,fatfs操作的时候某个文件的时候,浏览U盘也要打开这个文件获取属性,就会出问题。

可以考虑直接将底层的SD卡读写函数加互斥,以供FatFS和模拟U盘的接口函数使用。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 00:41 , Processed in 0.271590 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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