OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3893|回复: 4

FATFS文件系统的指针移动

[复制链接]

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
发表于 2018-7-5 10:42:42 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 ZDawn 于 2018-7-5 10:59 编辑

    使用原子哥的SD卡例程,其中文件系统的f_lseek()函数。    我发现让指针往后移动的话f_lseek()函数是让读写指针从当前位置往后累加的,但是让读写指针往前移动的话,f_lseek()函数会让读写指针从头开始计算累加。


    比如当前指针位置是20,我执行f_lseek(&fp1,21),函数的执行时间非常短,而执行f_lseek(&fp1,19),则函数的执行时间非常长。f_lseek()函数的读写指针参数要是比当前位置小的话,
f_lseek()函数会让指针从头开始累加,导致读写指针位置从20跳到19要用很长的时间,而从20跳到21却用很短的时间。
   但是但是我想让读写指针从20跳到19并且用非常短的时间,请问各位有没有办法解决??


最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=applescript,true]/* Using fast seek function */ DWORD clmt[SZ_TBL]; /* Cluster link map table buffer */ res = f_open(fp, fname, FA_READ | FA_WRITE); /* Open a file */ res = f_lseek(fp, ofs1); /* This is normal seek (cltbl is nulled on file open) */ fp->cltbl = clmt; /* Enable fast seek function (cltbl ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2018-7-5 10:42:43 | 显示全部楼层
[mw_shl_code=applescript,true]/* Using fast seek function */

    DWORD clmt[SZ_TBL];                    /* Cluster link map table buffer */

    res = f_open(fp, fname, FA_READ | FA_WRITE);   /* Open a file */

    res = f_lseek(fp, ofs1);               /* This is normal seek (cltbl is nulled on file open) */

    fp->cltbl = clmt;                      /* Enable fast seek function (cltbl != NULL) */
    clmt[0] = SZ_TBL;                      /* Set table size */
    res = f_lseek(fp, CREATE_LINKMAP);     /* Create CLMT */
    ...

    res = f_lseek(fp, ofs2);               /* This is fast seek */[/mw_shl_code] 没仔细看这个 fast seek,可能对你有用     http://elm-chan.org/fsw/ff/doc/lseek.html
我有故事,你有酒吗
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
 楼主| 发表于 2018-7-5 10:52:42 | 显示全部楼层
这个不解决的话,读写指针要是跳到几十万字节的位置会很伤啊,耗时巨大。。。
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
 楼主| 发表于 2018-7-5 12:11:39 | 显示全部楼层
来俩不甜的 发表于 2018-7-5 10:53
[mw_shl_code=applescript,true]/* Using fast seek function */

    DWORD clmt[SZ_TBL];              ...

谢谢,使用了fast seek之后快多了。
但是关于这个数组DWORD clmt[SZ_TBL];  我还是不大清楚SZ_TBL应该的值怎么取,
目前我设SZ_TBL的值较大,如果知道SZ_TBL怎么取的话还能再节省点资源
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-7-16
在线时间
31 小时
发表于 2018-7-16 12:01:12 | 显示全部楼层
ZDawn 发表于 2018-7-5 12:11
谢谢,使用了fast seek之后快多了。
但是关于这个数组DWORD clmt[SZ_TBL];  我还是不大清楚SZ_TBL应该的 ...

你好,我也在弄类似的问题但是假如fast seek后无法多次写入了,能不能把你fast seek那一段代码分享一下
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 07:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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