?? temp.c
字號:
/*
strcpy( mCmdParam.Open.mPathName, "\\C51\\CH375HFT.C" ); /* 文件名,該文件在C51子目錄下 */
i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN ); /* 打開文件,輸入參數置為最大值,省得再計算參數長度 */
TempLength = 0;
if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) { /* ERR_MISS_DIR說明沒有找到C51子目錄,ERR_MISS_FILE說明沒有找到文件 */
}
else { /* 找到文件\C51\CH375HFT.C或者出錯 */
mStopIfError( i );
mCmdParam.ByteRead.mByteCount = 6; /* 請求讀出6字節數據, 單次讀寫的長度不能超過 sizeof( mCmdParam.ByteWrite.mByteBuffer ) */
i = ExecCommand( CMD_ByteRead, 1 ); /* 以字節為單位讀取數據 */
mStopIfError( i );
for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%C", mCmdParam.ByteRead.mByteBuffer[i] );
printf( "]\n" );
if ( mCmdParam.ByteRead.mByteCount<6 ) printf( "已經到文件的末尾\n" );
if ( mCmdParam.ByteRead.mByteCount==6 ) { /* 未到文件末尾 */
mCmdParam.ByteRead.mByteCount = 20; /* 請求再讀出20字節數據, 單次讀寫的長度不能超過 sizeof( mCmdParam.ByteWrite.mByteBuffer ) */
i = ExecCommand( CMD_ByteRead, 1 ); /* 以字節為單位讀取數據,接著剛才的向后讀 */
mStopIfError( i );
TempLength = mCmdParam.ByteRead.mByteCount; /* 第二次讀出字節數 */
memcpy( TempBuffer, mCmdParam.ByteRead.mByteBuffer, TempLength ); /* 暫存第二次讀出的數據以便寫入新文件中 */
printf( "從文件中讀出的第6個字符開始依次是[" );
for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%C", mCmdParam.ByteRead.mByteBuffer[i] );
printf( "]\n" );
if ( mCmdParam.ByteRead.mByteCount<20 ) printf( "已經到文件的末尾\n" );
}
printf( "Close\n" );
mCmdParam.Close.mUpdateLen = 0;
i = ExecCommand( CMD_FileClose, 1 ); /* 關閉文件 */
mStopIfError( i );
}
/* 產生新文件 */
printf( "Create\n" );
/* strcpy( mCmdParam.Create.mPathName, "\\NEWFILE.TXT" );*/
strcpy( mCmdParam.Create.mPathName, "\\雙擊我吧.TXT" ); /* 新文件名,在根目錄下 */
i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN ); /* 新建文件并打開,如果文件已經存在則先刪除后再新建 */
mStopIfError( i );
printf( "ByteLocate\n" );
// mCmdParam.ByteLocate.mByteOffset = 0; /* 移動到文件頭,用于重新回到文件頭,以便寫入數據覆蓋原數據 */
// ExecCommand( CMD_ByteLocate, 4 ); /* 以字節為單位移動文件指針 */
// mCmdParam.ByteLocate.mByteOffset = 0xFFFFFFFF; /* 移動到文件尾,用于在CMD_FileOpen打開文件后,繼續追加數據到已打開文件的末尾 */
// ExecCommand( CMD_ByteLocate, 4 ); /* 以字節為單位移動文件指針 */
printf( "Write\n" );
pStr = "Note: \xd\xa這個程序是以字節為單位進行U盤文件讀寫,單片機只需要有幾十字節的RAM,不需要外部RAM,\xd\xa首先從/C51/CH375HFT.C文件中讀出前20個字符,然后寫到本說明的下一行\xd\xa";
count = strlen( pStr ); /* 準備寫入的數據的總長度 */
while ( count ) { /* 如果較大,分多次寫入 */
if ( count < sizeof( mCmdParam.ByteWrite.mByteBuffer ) ) i = count; /* 只剩最后一些數據要寫入 */
else i = sizeof( mCmdParam.ByteWrite.mByteBuffer ); /* 數據較多,分多次寫入 */
count -= i; /* 計數 */
memcpy( mCmdParam.ByteWrite.mByteBuffer, pStr, i ); /* 復制準備寫入的數據到參數結構中,源數據可以來自ADC等,本例是來自程序空間的說明信息 */
pStr += i;
mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節數 */
i = ExecCommand( CMD_ByteWrite, 1+i ); /* 以字節為單位向文件寫入數據 */
mStopIfError( i );
}
// mCmdParam.ByteWrite.mByteCount = 0; /* 指定寫入0字節,用于刷新文件的長度,注意如果字節數不為0那么CMD_ByteWrite只負責寫入數據而不修改文件長度 */
// ExecCommand( CMD_ByteWrite, 1 ); /* 以字節為單位向文件寫入數據,因為是0字節寫入,所以只用于更新文件的長度,當階段性寫入數據后,可以用這種辦法更新文件長度 */
memcpy( mCmdParam.ByteWrite.mByteBuffer, TempBuffer, TempLength );
mCmdParam.ByteWrite.mByteCount = TempLength; /* 將原文件中的20個字節的數據添加到新文件的末尾 */
i = ExecCommand( CMD_ByteWrite, 1+TempLength ); /* 以字節為單位向文件寫入數據 */
mStopIfError( i );
printf( "Close\n" );
mCmdParam.Close.mUpdateLen = 1; /* 自動計算文件長度,當以字節為單位向文件寫入數據后,如果沒有用0長度的CMD_ByteWrite更新文件長度,那么可以在關閉文件時讓模塊自動更新文件長度 */
i = ExecCommand( CMD_FileClose, 1 ); /* 關閉文件,當以字節為單位向文件寫入(追加)數據后,必須在用完文件后關閉文件 */
mStopIfError( i );
/* 等待U盤斷開 */
printf( "Take_out\n" );
while ( 1 ) { /* 使用查詢方式看U盤是否斷開 */
i = ExecCommand( CMD_QueryStatus, 0 ); /* 查詢當前模塊的狀態 */
mStopIfError( i );
if ( mCmdParam.Status.mDiskStatus <= DISK_DISCONNECT ) break; /* U盤已經斷開 */
mDelaymS( 100 ); /* 沒有必要一直連續不停地查詢,可以讓單片機做其它事,沒事可做就延時等待一會再查詢 */
}
LED_OUT = 1; /* LED滅 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -