u盤模塊寫數(shù)據(jù)問題

對u盤創(chuàng)建256字節(jié)文件,但是在電腦上打開只有192字節(jié)。 每次創(chuàng)建件文件只有一次可以執(zhí)行完所有指令也就是建立一個文件,其他時候基本都在寫數(shù)據(jù)的時候出現(xiàn)錯誤。如果重新插下模塊又能創(chuàng)建一次。

在電腦上看一下文件的屬性,文件大小是多大?如果是192可能是文件大小更新錯誤. 寫完數(shù)據(jù)后一定要關(guān)閉文件.這是必要操作.另外出現(xiàn)的錯誤代碼是多少?


剛才看了下,發(fā)送256字節(jié)數(shù)據(jù),用電腦打開有可能是64字節(jié),也有可能是128字節(jié)。程序中寫完數(shù)據(jù)或著有錯誤都關(guān)閉文件。 256字節(jié)分4次循環(huán)發(fā)送(64字節(jié)的數(shù)據(jù)RAM),仿真第一次順利通過,第二次返回狀態(tài)碼0x01(磁盤沒有連接或者已經(jīng)斷開 )。但是我的U盤怎么回斷開呢。


寫數(shù)據(jù)程序如下:

unsigned char UDisk_WriteFile(unsigned char *pStr, unsigned int count) { unsigned char i; while ( count ) { /* 如果較大,分多次寫入 */ if ( count < sizeof( mCmdParam.ByteWrite.mByteBuffer ) ) i = count; /* 只剩最后一些數(shù)據(jù)要寫入 */ else i = sizeof( mCmdParam.ByteWrite.mByteBuffer ); /* 數(shù)據(jù)較多,分多次寫入 */ count -= i; /* 計數(shù) */ memcpy( mCmdParam.ByteWrite.mByteBuffer, pStr, i ); /* 復(fù)制準備寫入的數(shù)據(jù)到參數(shù)結(jié)構(gòu)中,源數(shù)據(jù)可以來自ADC等,本例是來自程序空間的說明信息 */ pStr += i; mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節(jié)數(shù) */ i = ExecCommand( CMD_ByteWrite, 1+i ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù) */ if( mStopIfError( i )==FALSE) return FALSE; } return TRUE;

}


問題找到了。 因為用串口版模塊,為了在沒有插模塊的時候不至于死機在“判斷接收標志位”的地方。在while里加了延時判斷退出。正是這個延時出了問題,我之前延時大概40ms感覺應(yīng)該足夠了?,F(xiàn)在看來不夠,加大到80ms基本就沒問題了。

//從CH375模塊接收一個字節(jié)數(shù)據(jù) unsigned char mRecvByte(void) { unsigned char c; mRecvtime=TCNT3; //定時器2us while ((UCSR2A&0x80)==0) { if (TCNT3-mRecvtime>40000) { break; } } c=UDR2; return c; }


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

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