CH376扇區(qū)讀取

CH376如何進(jìn)行扇區(qū)讀取...CH376SecRead這個(gè)函數(shù)怎么運(yùn)用,公司給的資料解釋太少了...初學(xué)者看得不是很明白

扇區(qū)讀函數(shù)CH376SecRead( buf, ReqCount, RealCount )是從當(dāng)前已打開文件中讀取數(shù)據(jù),每次讀取后自動(dòng)移動(dòng)文件指針,第二次調(diào)用時(shí)將從第一次讀取數(shù)據(jù)的后面繼續(xù)讀取數(shù)據(jù)。在調(diào)用該子程序前,應(yīng)該在buf 中指定緩沖區(qū)起始地址,在ReqCount中指定準(zhǔn)備讀取的扇區(qū)數(shù)。具體應(yīng)用參考EXAM8


EXAM8看過了...里面具體講的還是寫扇區(qū)...讀扇區(qū)只是帶過而已... 可以幫我看下下面這個(gè)程序嗎...我用串口演示...不停地輸出的文字...怎樣才能讀取完扇區(qū)就結(jié)束... while( NewSize ){ s = CH376SecLocate( 0 ); /* 移動(dòng)到第一個(gè)字節(jié) */ mStopIfError( s ); total = ( NewSize + DEF_SECTOR_SIZE - 1 ) / DEF_SECTOR_SIZE; /* 將文件的字節(jié)數(shù)轉(zhuǎn)換為扇區(qū)數(shù)(除以DEF_SECTOR_SIZE),長(zhǎng)度加上DEF_SECTOR_SIZE-1用于確保寫入最后的零頭數(shù)據(jù) */ printf( "Read last tail = %d Bytes\n", total ); s = CH376SecRead( FileDataBuf, total, &RealCount ); /* 從文件讀取數(shù)據(jù) */ mStopIfError( s ); total -= RealCount; /* 計(jì)數(shù),減去當(dāng)前實(shí)際已經(jīng)讀出的字符數(shù) */ printf( "NewSize = %d Bytes\n", NewSize ); printf( "RealCount = %d Bytes\n", RealCount ); for ( s=0; s!=512; s++ ) printf( "%C", FileDataBuf[s] ); /* 顯示讀出的字符 */ printf( "文件已經(jīng)結(jié)束\n" ); if( total == 0 ) { printf( "\n" ); printf( "\n" ); printf( "文件已經(jīng)結(jié)束\n" ); goto Close; } }


上面的流程沒什么問題,但注意我們CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount )改成 CH376SecRead( PUINT8 buf, UINT8 ReqCount, UINT16 *RealCount )。因?yàn)閷?shí)際讀出扇區(qū)數(shù)定義類型與你定義類型不一致導(dǎo)致RealCount不正確,所以跳不出循環(huán)。


現(xiàn)在扇區(qū)讀寫成功了...用VS1053解碼也成功了...但是兩個(gè)模塊整合起來不行...請(qǐng)問下376讀取數(shù)據(jù)后讓1053解碼的思路是怎樣的...我嘗試讀取一個(gè)扇區(qū)解碼一次這個(gè)方法不行...不知是程序的哪個(gè)地方處理錯(cuò)誤...

while( NewSize ){ /* 扇區(qū)有字節(jié)讀出 */ s = CH376SecLocate( 0 ); /* 移動(dòng)到第一個(gè)字節(jié) */ mStopIfError( s ); /* 檢錯(cuò) */ total = ( NewSize + DEF_SECTOR_SIZE - 1 ) / DEF_SECTOR_SIZE; /* 將文件的字節(jié)數(shù)轉(zhuǎn)換為扇區(qū)數(shù)(除以DEF_SECTOR_SIZE),長(zhǎng)度加上DEF_SECTOR_SIZE-1用于確保寫入最后的零頭數(shù)據(jù) */ printf( "Read sector = %d \n", total ); /* 準(zhǔn)備要讀的扇區(qū)數(shù) */ while( total ) /* 如果扇區(qū)未讀完,則繼續(xù)讀扇區(qū) */ { s = CH376SecRead( FileDataBuf, 1, NULL ); /* 從文件讀取數(shù)據(jù) */ mStopIfError( s ); /* 檢錯(cuò) */ test_1053_PlayMP3File(); total --; /* 計(jì)數(shù),減去當(dāng)前實(shí)際已經(jīng)讀出的扇區(qū)數(shù) */ } if( total == 0 ) /* 如果要讀的扇區(qū)等于0,則文件讀到尾部 */ { printf( "\n" ); printf( "文件已經(jīng)結(jié)束\n" ); goto Close; /* 關(guān)閉文件 */ } }


建議采用雙緩沖的方式來進(jìn)行讀取和播放,在播放過程中插入讀取函數(shù)。你只需要保證讀取U盤的速度在100KB/S的速度基本上播放就沒有問題。


雙緩沖方式?怎么用呢...


雙緩沖方式就是你開啟兩個(gè)緩沖區(qū),第一個(gè)緩沖區(qū)讀取U盤數(shù)據(jù)后進(jìn)行解碼,在解碼的時(shí)候可以用第二個(gè)緩沖區(qū)讀取U盤數(shù)據(jù),當(dāng)?shù)谝粋€(gè)緩沖區(qū)解碼完成第二個(gè)緩沖區(qū)也讀滿了,然后開始第二個(gè)緩沖區(qū)解碼,此時(shí)第一個(gè)緩沖區(qū)讀數(shù)據(jù)。如此循環(huán)即可


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频