搜索
bottom↓
回复: 11

请教RT_USING_DFS的初始化问题

[复制链接]

出0入0汤圆

发表于 2010-4-16 16:44:27 | 显示全部楼层 |阅读模式
在startup.c调用dfs_init();elm_init();初始化文件系统,系统运行起来会出现swi_handler异常,如果参照网路收音机程序,在一个线程中调用这2个初始化函数,系统运行就没有问题,调试发现跟dlock互斥资源有关,请教一下dfs_init();elm_init();是不是一定要在线程中初始化才行呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-4-16 19:14:49 | 显示全部楼层
是的,需要在任务中初始化文件系统。

dlock是一个mutex,在线程还未启动时是不能持有mutex的。mutex有所有权属性,持有者必须是一个线程。

出0入0汤圆

 楼主| 发表于 2010-4-16 22:16:57 | 显示全部楼层
我的系统里面只用到SD卡,调用dfs_mount("sd0", "/SD", "elm", 0, 0),执行到        fs = dfs_filesystem_lookup(fullpath);fs为空直接返回DFS_STATUS_ENOENT;导致mount SD卡失败,调试发现如果将SD卡mount为一个root director就没有问题,请问是不是一定要先mount一个root directory,然后才能在root dirctory下面mount其他分区呢?

出0入0汤圆

发表于 2010-4-16 22:42:40 | 显示全部楼层
"/SD" 必须存在. 你只有一个所以,不能.
如果有两个,"/" 也必须在前面.
且"/"里面要有"/SD".如果原"/SD"里面有内容,则看不见了(实际上还在).

出0入0汤圆

 楼主| 发表于 2010-4-17 10:15:46 | 显示全部楼层
你的意思是,我系统里面只用到SD卡设备,是可以这样用dfs_mount("sd0", "/SD", "elm", 0, 0)来mount一个SD盘

出0入0汤圆

发表于 2010-4-17 11:19:36 | 显示全部楼层
回复【4楼】fsmcu  
你的意思是,我系统里面只用到SD卡设备,是可以这样用dfs_mount("sd0", "/SD", "elm", 0, 0)来mount一个SD盘
-----------------------------------------------------------------------
不能,你只能 dfs_mount("sd0", "/", "elm", 0, 0) 来挂载到根目录.

如果你还有一个SD卡可以,则可以挂载到前一个SD卡的SD这个子目录.
dfs_mount("sd1", "/SD", "elm", 0, 0)

出0入0汤圆

发表于 2010-4-17 13:21:33 | 显示全部楼层
除了根目录外,你mount的目标目录必须存在,否则mount失败。

出0入0汤圆

 楼主| 发表于 2010-4-17 14:00:49 | 显示全部楼层
哦,了解,比如系统里面有SD卡设备,SPI Flash设备,nand flash设备,还有SDRam划分出一部分空间做文件系统,按照使用电脑习惯分区理解的话可以分成4个分区C,D,E,F,在RT里面就应该是先一个根目录区(比如SDRam),然后其他几个分区/SD /SPI /NAND,这样就会理解成SDRam和其余3个分区是属于包含关系,相当于是目录和子目录的关系

出0入0汤圆

 楼主| 发表于 2010-4-21 15:59:46 | 显示全部楼层
回复【6楼】ffxz
除了根目录外,你mount的目标目录必须存在,否则mount失败。
-----------------------------------------------------------------------
我现在的系统里面有SD卡,2个U盘,所以mount这3个分区如下

dfs_mount("sd", "/", "elm", 0, 0)
dfs_mount("usb0", "/usb0", "elm", 0, 0)
dfs_mount("usb1", "/usb1", "elm", 0, 0)
mount /usb0 和 /usb1失败,

对比网络收音机:
dfs_mount("spi0", "/", "elm", 0, 0)
dfs_mount("sd0", "/SD", "elm", 0, 0)
filesystem_table初始化时都是清0,也没有做什么特别的动作,

应该要如何解决这个问题呢?

出0入0汤圆

发表于 2010-4-22 08:48:45 | 显示全部楼层
我的理解,你的SD卡上应该有/usb0,和/usb1两个目录才可以;另外你需要注册“usb0”和“usb1”两个设备。不过你的系统是怎么接U盘的呢?STM32的USB口只是device,你的系统是有自己的USB Host接口吗?

出0入0汤圆

 楼主| 发表于 2010-4-22 09:34:19 | 显示全部楼层
我用的不是STM32,CPU上面有USB HOST功能,按照楼上的理解,那网络收音机里面就变的SPI flash里面应该已经创建好了SD这个目录文件夹,可是我看程序
dfs_mount("spi0", "/", "elm", 0, 0)
dfs_mount("sd0", "/SD", "elm", 0, 0)
连续做2个mount动作,而不是说先mount了spi0,然后再创建SD目录,最后去mount sd0

出0入0汤圆

发表于 2010-4-22 09:37:48 | 显示全部楼层
根目录不需要创建即可mount,因为它是第一装载点

/SD目录不可能每次都在代码中创建出来,所以需要在finsh shell中执行命令
mkdir("/SD")

以后运行就都会装载成功。或者另一个方法,在装载之前先判断目录是否存在,不存在主动创建它,然后再装载。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-31 10:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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