有关ZLG/FS包的01背包问题动态规划求助

有什么好看的 - 歌单 - 网易云音乐
有什么好看的
播放:179次
网易云音乐多端下载
同步歌单,随时畅听320k好音乐
网易公司版权所有(C)杭州乐读科技有限公司运营:拒绝访问 | bbs.yingjiesheng.com | 百度云加速
请打开cookies.
此网站 (bbs.yingjiesheng.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3f4d3b0b-ua98).
重新安装浏览器,或使用别的浏览器关于ZLG/FS的速度问题 - 捷配电子市场网
关于ZLG/FS的速度问题
作者:bqt 栏目:
关于ZLG/FS的速度问题&
作者: bqt 于
20:57:00 发布:
关于ZLG/FS的速度问题&&&&用了一段时间的SmartARM2200开发板,感觉它的整体功能是很不错的,它上面带有 PACK板,提供有USB1.1的主机和设备接口,用HostMassLib和ZLG/FS可以读写U盘文件,给应用带来很大的方便。&&&&不过我在使用HostMassLib和ZLG/FS读写U盘文件时,感觉速度很慢,程序是参照范例自己写的,UCOSII中也没有其它多余的任务,大概的从U盘读文件速度只有300~400Bytes/s,读取少量数据还可以,读取数据量大的话就要很长时间了。比如我从U盘中读了一个240×320的图片文件然后在TFT6758上显示,要7分多钟才完成。该图片文件是按照TFT6758要求取模后生成的二进制文件,大小是。如果把图片数据编译到程序里,直接在TFT6758上显示半秒钟都不要。&&&&请问周工,在SmartARM2200开发板上,CPU频率44M,BCFG0 = 0x 外部RAM,BCFG1 = 0x 外部,读取U盘文件的速率应该可以做到多少?谢谢!
作者: bqt 于
22:11:00 发布:
如果速度太慢,用起来就没有什么实际意义了如果速度太慢,用起来就没有什么实际意义了。
作者: czh 于
8:47:00 发布:
你看看FileGetCh函数就知道为什么慢了&
作者: bqt 于
23:45:00 发布:
我的测试结果&&&&的确,函数FileRead就是通过不断调用FileGetCh从文件中读取数据,FileGetCh这个函数执行起来很花时间。参数处理、获取文件所在逻辑盘信息、计算数据在哪个扇区、读取数据都要花时间,但是我想最花时间的还不在这里,真正花时间比较多的是ZLG/FS里面对Cache的操作。&&&&体现在FileGetCh中就是OpenSec和ReadSec这两个函数,OpenSec是打开Cache,ReadSec是读逻辑盘数据到Cache。它们当中都有这样的循环:for (i = 0; i & MAX_DISK_CACHES; i++)&&作用是为了给非空闲Cache的RW_ID值加1、判断逻辑扇区是否已经被缓存、找出对应逻辑扇区在Cache中的位置。在OpenSec中有3个这样的循环,在ReadSec中有1个。&&&&在fat.h中默认的MAX_DISK_CACHES值为200,可以想象MAX_DISK_CACHES值设置得越大,在读取大量数据时反而效率越低(这是相对于速度比较快的存储介质而言的)。因为不得不花很多时间去给非空闲Cache的RW_ID值加1,去判断逻辑扇区是否已经被缓存,去找出对应逻辑扇区在Cache中的位置。虽然说这样的循环并不是每次都要进行到底(给非空闲Cache的RW_ID值加1每次都要进行到底),只要找到了合适的Cache,就会用Break语句退出。但是在读取大量数据时很多Cache都被使用了,要找到一个合适的Cache就要进行很多次比较。&&&&为了进行验证,进行了以下的测试。用HostMassLib和ZLG/FS从U盘读取一个的图片文件(240×320),并在TFT6758上显示出来,采用不同的MAX_DISK_CACHES值。&&&&MAX_DISK_CACHES=200,读取用时7分钟,速度大约300~400Bytes/s&&&&MAX_DISK_CACHES=20, 读取用时65秒, 速度大约2363Bytes/s&&&&MAX_DISK_CACHES=10, 读取用时44秒, 速度大约3491Bytes/s&&&&MAX_DISK_CACHES=1,&&读取用时25秒, 速度大约6144Bytes/s&&&&从这些测试数值可以看出MAX_DISK_CACHES值取得越小,读取文件的速度反而越快,并且速度变化幅度是很大的。MAX_DISK_CACHES不能设为0,否则编译不能通过。&&&&总之,我的结论是,对于速度比较快的存储介质,文件系统Cache数目越多,读取大量数据时效率越低,速度越慢。Cache对于速度很慢的存储介质才是有用处的。而在《ARM嵌入式系统软件开发实例一》第58页有这样一句话:&&&&“注意:此数(指MAX_DISK_CACHES)对Cache的效率影响极大,太小会极大的降低Cache的性能,进而影响整个ZLG/FS的性能。”&&&&我想,书上这句话与我的测试结果刚好相反,但也不能说这句话是错的,因为它没有加条件。&&&&以上观点仅仅代表个人的看法,由于对ZLG/FS文件系统的理解有限,难免会引出错误的结论,希望大家提出各自的看法。
作者: cccaao 于
10:03:00 发布:
你看看FileGetCh函数就知道为什么慢了 &无内容&应该是看看FileRead函数就知道了也就是说每读一个字节都调用一次FileGetCh,一个Sector不知道要重复读多少次,不是有毛病么,改写之后能提高几个数量级的速度
作者: bqt 于
18:01:00 发布:
好像是这样&
作者: hexinkang 于
23:50:00 发布:
这个要顶一下,请周公解释解释、有没有改进方法,如果有,马上提示!我也是要完成这个工作,不然的话,我死的很惨。
作者: liwenz 于
20:18:00 发布:
作者: cyuan5 于
8:41:00 发布:
我马上要用+读USB盘,能交个朋友吗!打算搞个SmartARM2200板,它本身就有带有 PACK板?
作者: hexinkang 于
12:27:00 发布:
怎么没人回答周公呢?有解答的方法吗
作者: eleven11 于
21:04:00 发布:
如楼上所说,改一下那个函数还有可以改一下查询算法,这样速度是很快的,真的很快,我512个cache速度也很快的,缺陷就是最大只能512了 * - 本贴最后修改时间: 21:10:32 修改者:eleven11
作者: eleven11 于
21:05:00 发布:
好像有几处BUG。不过不影响使用&
作者: bqt 于
23:42:00 发布:
是的&&&&是的,应该把FileRead函数改掉,由原来调用FileGetCh函数的一个字节一个字节的读取改为一个扇区一个扇区的读取,这里主要要处理好文件读取偏移量与读取数据个数之间的关系,极端情况下即使只读取两个字节也要分别读取两个扇区。&&&&在进行连续的大量数据读取的时候,可以跳过Cache,直接对扇区操作,使用Cache会降低效率,Cache对于读取大量数据来说意义不大。但是读写数据量不是很大(比如小于512字节)且读写很频繁的时候,使用Cache绝对会提高性能。&&&&改过之后性能提高很大,读U盘的速率有50Kbyte/s,这里要说一下,因为即使不使用文件系统直接调用HostMassLib驱动对U盘扇区进行操作速度也仅仅是60Kbyte/s左右,文件系统的开销已经不大了。
讨论内容:
Copyright &
www.dzsc.com 浙ICP证030469号}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信