共2条
1/1 1 跳转至页
zlg,fs 我发现zlg/fs文件系统有错误!

问
1. 删除文件函数RemoveFile()中:
(1)if (FindOpenFile(Drive, ClusterIndex, DirName) < MAX_OPEN_FILES)
{删除文件}
应该改为:
(2)if (FindOpenFile(Drive, ClusterIndex, DirName) >= MAX_OPEN_FILES)
{删除文件}
因为FindOpenFile()的返回值为打开的文件的句柄,如果(1)对,则说明文件已经打开,此时是不能删除文件的,所以我觉得应该改为(2).
2. 改变当前目录函数ChangeDir(Path)中:
有调用函数GetDirClusterIndex(pPath):
if (FindFDTInformation(&Rt, Drive, ClusIndex, DirName) != RETURN_OK)
{uiErr = BAD_CLUSTER;
break;
}
DirName是Path中的目录名,if语句中既然成立,证明能找到Path中的目录名,Path中的目录名不是现在要改的吗?怎么会存在呢?
答 1: 我一直没有看懂我很想看懂这一部分,可没有资料,没办法看懂。
看来你有什么资料,还能看出他的问题。
你是怎么看懂的,望能交流 答 2: 。1,如果磁盘里没有那个文件,怎么删除?流程可能是 : 打开文件---〉(如果文件存才) ---〉 删除文件,这里也有个问题:文件句柄如果用完,那个文件无法打开,也就不能删除,不清楚zlg fs这点有没有考虑
2,path = dirname + filename(也可能是目录),if语句的目的好像是在判断path指定的目录是否存在,如果不存在,返回。建议楼主把代码多看几遍,这点仅从这点代码无法判断fs 是否有错。测试一下,应该就知道了。。 答 3: re:lyy1981我觉得你说的不对:
1. 对于删除文件函数,有判断文件是否存在,那是对的,我说的错误是在后面判断文件是否打开,只有文件关闭才能删除,它这里是用FindOpenFile()来判断的,这个函数的返回值有二钟情况:打开的文件的句柄;没有找到打开的文件。应该为后者才能被删除啊!而书中的判断刚好反了!
2. 你说的是没错,可是不存在返回的话,这个返回值就是改变当前目录函数ChangeDir(Path)的返回值,因为在这个函数中,只有返回值不等于 BAD_CLUSTER才能改变目录啊!也就是改变逻辑盘信息中的当前目录首簇号这一项,这是改变目录的实质。
你觉得呢? 答 4: re:lyy1981你有看过或调试过这个文件系统吗?
我这是在调试中才发现的,不调试我哪看的出来啊? 答 5: re程序在《ARM嵌入式系统软件开发实例》这本书中! 答 6: 我没调过 答 7: re我改了以上2个函数后,调试都通过了!
还有,周立功文件系统读写文件很慢很慢,我写一个35K的文件都花了40S,这样肯定不行。
我把读写文件函数自己写了一下,结果很快,不到1S就好了!
看来这个文件系统还有很多问题哦! 答 8: 文件系统全部是线性查找的我也修改了查询算法
(1)if (FindOpenFile(Drive, ClusterIndex, DirName) < MAX_OPEN_FILES)
{删除文件}
应该改为:
(2)if (FindOpenFile(Drive, ClusterIndex, DirName) >= MAX_OPEN_FILES)
{删除文件}
因为FindOpenFile()的返回值为打开的文件的句柄,如果(1)对,则说明文件已经打开,此时是不能删除文件的,所以我觉得应该改为(2).
2. 改变当前目录函数ChangeDir(Path)中:
有调用函数GetDirClusterIndex(pPath):
if (FindFDTInformation(&Rt, Drive, ClusIndex, DirName) != RETURN_OK)
{uiErr = BAD_CLUSTER;
break;
}
DirName是Path中的目录名,if语句中既然成立,证明能找到Path中的目录名,Path中的目录名不是现在要改的吗?怎么会存在呢?
答 1: 我一直没有看懂我很想看懂这一部分,可没有资料,没办法看懂。
看来你有什么资料,还能看出他的问题。
你是怎么看懂的,望能交流 答 2: 。1,如果磁盘里没有那个文件,怎么删除?流程可能是 : 打开文件---〉(如果文件存才) ---〉 删除文件,这里也有个问题:文件句柄如果用完,那个文件无法打开,也就不能删除,不清楚zlg fs这点有没有考虑
2,path = dirname + filename(也可能是目录),if语句的目的好像是在判断path指定的目录是否存在,如果不存在,返回。建议楼主把代码多看几遍,这点仅从这点代码无法判断fs 是否有错。测试一下,应该就知道了。。 答 3: re:lyy1981我觉得你说的不对:
1. 对于删除文件函数,有判断文件是否存在,那是对的,我说的错误是在后面判断文件是否打开,只有文件关闭才能删除,它这里是用FindOpenFile()来判断的,这个函数的返回值有二钟情况:打开的文件的句柄;没有找到打开的文件。应该为后者才能被删除啊!而书中的判断刚好反了!
2. 你说的是没错,可是不存在返回的话,这个返回值就是改变当前目录函数ChangeDir(Path)的返回值,因为在这个函数中,只有返回值不等于 BAD_CLUSTER才能改变目录啊!也就是改变逻辑盘信息中的当前目录首簇号这一项,这是改变目录的实质。
你觉得呢? 答 4: re:lyy1981你有看过或调试过这个文件系统吗?
我这是在调试中才发现的,不调试我哪看的出来啊? 答 5: re程序在《ARM嵌入式系统软件开发实例》这本书中! 答 6: 我没调过 答 7: re我改了以上2个函数后,调试都通过了!
还有,周立功文件系统读写文件很慢很慢,我写一个35K的文件都花了40S,这样肯定不行。
我把读写文件函数自己写了一下,结果很快,不到1S就好了!
看来这个文件系统还有很多问题哦! 答 8: 文件系统全部是线性查找的我也修改了查询算法
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |