|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于ZLG/FS的速度問題 |
| 作者:bqt 欄目:ARM技術(shù) |
| 2樓: | >>參與討論 |
| 作者: bqt 于 2005/8/27 20:57:00 發(fā)布:
關(guān)于ZLG/FS的速度問題 用了一段時間的SmartARM2200開發(fā)板,感覺它的整體功能是很不錯的,它上面帶有ISP1161 PACK板,提供有USB1.1的主機和設(shè)備接口,用HostMassLib和ZLG/FS可以讀寫U盤文件,給應(yīng)用帶來很大的方便。 不過我在使用HostMassLib和ZLG/FS讀寫U盤文件時,感覺速度很慢,程序是參照范例自己寫的,UCOSII中也沒有其它多余的任務(wù),大概的從U盤讀文件速度只有300~400Bytes/s,讀取少量數(shù)據(jù)還可以,讀取數(shù)據(jù)量大的話就要很長時間了。比如我從U盤中讀了一個240×320的圖片文件然后在TFT6758上顯示,要7分多鐘才完成。該圖片文件是按照TFT6758要求取模后生成的二進制文件,大小是150K。如果把圖片數(shù)據(jù)編譯到程序里,直接在TFT6758上顯示半秒鐘都不要。 請問周工,在SmartARM2200開發(fā)板上,CPU頻率44M,BCFG0 = 0x10001460 外部RAM,BCFG1 = 0x10000460 外部FLASH,讀取U盤文件的速率應(yīng)該可以做到多少?謝謝! |
|
| 3樓: | >>參與討論 |
| 作者: bqt 于 2005/8/28 22:11:00 發(fā)布:
如果速度太慢,用起來就沒有什么實際意義了 如果速度太慢,用起來就沒有什么實際意義了。 |
|
| 4樓: | >>參與討論 |
| 作者: czh 于 2005/8/29 8:47:00 發(fā)布:
你看看FileGetCh函數(shù)就知道為什么慢了 |
|
| 5樓: | >>參與討論 |
| 作者: bqt 于 2005/8/29 23:45:00 發(fā)布:
我的測試結(jié)果 的確,函數(shù)FileRead就是通過不斷調(diào)用FileGetCh從文件中讀取數(shù)據(jù),F(xiàn)ileGetCh這個函數(shù)執(zhí)行起來很花時間。參數(shù)處理、獲取文件所在邏輯盤信息、計算數(shù)據(jù)在哪個扇區(qū)、讀取數(shù)據(jù)都要花時間,但是我想最花時間的還不在這里,真正花時間比較多的是ZLG/FS里面對Cache的操作。 體現(xiàn)在FileGetCh中就是OpenSec和ReadSec這兩個函數(shù),OpenSec是打開Cache,ReadSec是讀邏輯盤數(shù)據(jù)到Cache。它們當(dāng)中都有這樣的循環(huán): for (i = 0; i < MAX_DISK_CACHES; i++) 作用是為了給非空閑Cache的RW_ID值加1、判斷邏輯扇區(qū)是否已經(jīng)被緩存、找出對應(yīng)邏輯扇區(qū)在Cache中的位置。在OpenSec中有3個這樣的循環(huán),在ReadSec中有1個。 在fat.h中默認(rèn)的MAX_DISK_CACHES值為200,可以想象MAX_DISK_CACHES值設(shè)置得越大,在讀取大量數(shù)據(jù)時反而效率越低(這是相對于速度比較快的存儲介質(zhì)而言的)。因為不得不花很多時間去給非空閑Cache的RW_ID值加1,去判斷邏輯扇區(qū)是否已經(jīng)被緩存,去找出對應(yīng)邏輯扇區(qū)在Cache中的位置。雖然說這樣的循環(huán)并不是每次都要進行到底(給非空閑Cache的RW_ID值加1每次都要進行到底),只要找到了合適的Cache,就會用Break語句退出。但是在讀取大量數(shù)據(jù)時很多Cache都被使用了,要找到一個合適的Cache就要進行很多次比較。 為了進行驗證,進行了以下的測試。用HostMassLib和ZLG/FS從U盤讀取一個150K的圖片文件(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 從這些測試數(shù)值可以看出MAX_DISK_CACHES值取得越小,讀取文件的速度反而越快,并且速度變化幅度是很大的。MAX_DISK_CACHES不能設(shè)為0,否則編譯不能通過。 總之,我的結(jié)論是,對于速度比較快的存儲介質(zhì),文件系統(tǒng)Cache數(shù)目越多,讀取大量數(shù)據(jù)時效率越低,速度越慢。Cache對于速度很慢的存儲介質(zhì)才是有用處的。而在《ARM嵌入式系統(tǒng)軟件開發(fā)實例一》第58頁有這樣一句話: “注意:此數(shù)(指MAX_DISK_CACHES)對Cache的效率影響極大,太小會極大的降低Cache的性能,進而影響整個ZLG/FS的性能。” 我想,書上這句話與我的測試結(jié)果剛好相反,但也不能說這句話是錯的,因為它沒有加條件。 以上觀點僅僅代表個人的看法,由于對ZLG/FS文件系統(tǒng)的理解有限,難免會引出錯誤的結(jié)論,希望大家提出各自的看法。 |
|
| 6樓: | >>參與討論 |
| 作者: cccaao 于 2005/8/30 10:03:00 發(fā)布:
你看看FileGetCh函數(shù)就知道為什么慢了 <無內(nèi)容> 應(yīng)該是看看FileRead函數(shù)就知道了 也就是說每讀一個字節(jié)都調(diào)用一次FileGetCh,一個Sector不知道要重復(fù)讀多少次,不是有毛病么,改寫之后能提高幾個數(shù)量級的速度 |
|
| 7樓: | >>參與討論 |
| 作者: bqt 于 2005/10/16 18:01:00 發(fā)布:
好像是這樣 |
|
| 8樓: | >>參與討論 |
| 作者: hexinkang 于 2005/10/16 23:50:00 發(fā)布:
這個要頂一下,請周公解釋解釋、 有沒有改進方法,如果有,馬上提示! 我也是要完成這個工作,不然的話,我死的很慘。 |
|
| 9樓: | >>參與討論 |
| 作者: liwenz 于 2005/10/17 20:18:00 發(fā)布:
關(guān)注 |
|
| 10樓: | >>參與討論 |
| 作者: cyuan5 于 2005/10/18 8:41:00 發(fā)布:
我馬上要用lpc2214+讀USB盤,能交個朋友嗎!cyuan5@163.com 打算搞個SmartARM2200板,它本身就有帶有ISP1161 PACK板? |
|
| 11樓: | >>參與討論 |
| 作者: hexinkang 于 2005/10/18 12:27:00 發(fā)布:
怎么沒人回答 周公呢? 有解答的方法嗎 |
|
| 12樓: | >>參與討論 |
| 作者: eleven11 于 2005/12/14 21:04:00 發(fā)布:
如樓上所說,改一下那個函數(shù) 還有可以改一下查詢算法,這樣速度是很快的,真的很快,我512個cache速度也很快的,缺陷就是最大只能512了 * - 本貼最后修改時間:2005-12-14 21:10:32 修改者:eleven11 |
|
| 13樓: | >>參與討論 |
| 作者: eleven11 于 2005/12/14 21:05:00 發(fā)布:
好像有幾處BUG。不過不影響使用 |
|
| 14樓: | >>參與討論 |
| 作者: bqt 于 2006/2/19 23:42:00 發(fā)布:
是的 是的,應(yīng)該把FileRead函數(shù)改掉,由原來調(diào)用FileGetCh函數(shù)的一個字節(jié)一個字節(jié)的讀取改為一個扇區(qū)一個扇區(qū)的讀取,這里主要要處理好文件讀取偏移量與讀取數(shù)據(jù)個數(shù)之間的關(guān)系,極端情況下即使只讀取兩個字節(jié)也要分別讀取兩個扇區(qū)。 在進行連續(xù)的大量數(shù)據(jù)讀取的時候,可以跳過Cache,直接對扇區(qū)操作,使用Cache會降低效率,Cache對于讀取大量數(shù)據(jù)來說意義不大。但是讀寫數(shù)據(jù)量不是很大(比如小于512字節(jié))且讀寫很頻繁的時候,使用Cache絕對會提高性能。 改過之后性能提高很大,讀U盤的速率有50Kbyte/s,這里要說一下,因為即使不使用文件系統(tǒng)直接調(diào)用HostMassLib驅(qū)動對U盤扇區(qū)進行操作速度也僅僅是60Kbyte/s左右,文件系統(tǒng)的開銷已經(jīng)不大了。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |