CH376字節(jié)讀函數(shù)UINT8 CH376ByteRead( );我一次最大問什么只能讀255個(gè)字節(jié),再大就讀不出來了,不知問什么?
文件多大?UINT8 CH376ByteRead( );一次可以最多讀出65535個(gè)字節(jié). 另外注意緩沖區(qū)不要小于一次讀出的字節(jié)數(shù).另外請?jiān)敿?xì)說明不能讀出的具體現(xiàn)象
文件大小絕對(duì)超過255個(gè)字節(jié),在讀字節(jié)函數(shù)中超過255個(gè)字節(jié)后就什么也讀不出來了. "緩沖區(qū)不要過于一次讀出的字節(jié)數(shù)" 那讀出的數(shù)據(jù)怎么能放的下?
提示一下你注意的地方,沒有犯這個(gè)錯(cuò)誤更好. 超過255個(gè)字節(jié)就死機(jī)?等待中斷等不到了?可以把你的函數(shù)貼出來看看
我用的是AVR的硬件SPI方式,一直循環(huán)檢測中斷,我發(fā)現(xiàn)確實(shí)是超過255個(gè)字節(jié)就一直檢測中斷,檢測不到就一直跳不出來!怎么解決?還有論壇可以添加附件嗎?我好把程序貼上
右下腳有個(gè)修改帖子的圖標(biāo),點(diǎn)擊后可以添加附件,請壓縮后上傳
是不是你的循環(huán)控制變量聲明的類型有問題?如果像下面的程序就死定了,試試unsigned int i看看:
unsigned char i;
for (i=0;i<65535;i++) { ...... }
樓主解決了嗎
您好字節(jié)寫可以寫入多字節(jié)。UINT8CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) ,長度為uint16。您如果寫入超過255就無法寫入的話,看一下存放數(shù)據(jù)的緩沖區(qū)大小是否大于255,其次調(diào)用字節(jié)寫函數(shù)的實(shí)參長度是否正確。最后您可以確認(rèn)一下字節(jié)寫函數(shù)的參數(shù)定義是否為uint16類型。這邊貼出部分代碼提供參考。
//此處為while(1)里面的部分代碼。
s = CreateFileAndTime( "/123.TXT", 1, MAKE_FILE_DATE( 2020, 6, 8 ), MAKE_FILE_TIME( 15, 39, 20 ), MAKE_FILE_DATE( 2020, 6, 8 ), MAKE_FILE_TIME( 15, 39, 20 ) );
printf("1\r\n");
mStopIfError( s );
printf("1\r\n");
s=CH376FileOpen("/123.TXT");
mStopIfError( s );
//s=DataToChar( 45678,? buf1 );
//
//s=sizeof(buf_long1);
s = CH376ByteWrite( buf_long1, 512, p );
s = CH376FileClose( TRUE );
Delay_Ms( 20 );
以下為驅(qū)動(dòng)代碼。
UINT8CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount )? /* ??×??????????ò?±?°?????????????é */
{
UINT8s;
xWriteCH376Cmd( CMD2H_BYTE_WRITE );
xWriteCH376Data( (UINT8)ReqCount );
xWriteCH376Data( (UINT8)(ReqCount>>8) );
xEndCH376Cmd( );
if ( RealCount ) *RealCount = 0;
while ( 1 ) {
s = Wait376Interrupt( );
if ( s == USB_INT_DISK_WRITE ) {
s = CH376WriteReqBlock( buf );? /* ?ò???????¨?????????????ó???????é,·????¤?? */
xWriteCH376Cmd( CMD0H_BYTE_WR_GO );
xEndCH376Cmd( );
buf += s;
if ( RealCount ) *RealCount += s;
}
/*else if ( s == USB_INT_SUCCESS ) return( s );*/? /* ?á?? */
else return( s );? /* ?í?ó */
}
}
樓主解決了嗎