CH375A讀寫U盤基本調(diào)試成功

從去年八月份調(diào)試了一個(gè)星期的后,中間因公司項(xiàng)目需要,一直在做其他的事情,今年1月中旬又開始調(diào)試這個(gè)項(xiàng)目,中間斷斷續(xù)續(xù)的,一會(huì)忙這,一會(huì)忙那個(gè)事情,現(xiàn)在總算把這個(gè)成功的調(diào)試出來了,哎!原來以為很簡(jiǎn)單,自己親自做了,才知道一個(gè)小小的疏忽可能就會(huì)產(chǎn)生很大影響.呵呵!現(xiàn)在總是調(diào)試好了!   不過現(xiàn)在有一個(gè)問題,想問一下貴公司的技術(shù)人員,我想在文件頭或者尾增加一些與文件相關(guān)的信息,比如說我增加一個(gè)扇區(qū),用于存該文件的文件信息,這些信息都是很重要的信息,并且每次操作后,都會(huì)進(jìn)行一定的修改,那么假如我在文件尾追加數(shù)據(jù)的話,會(huì)不會(huì)影響了其他文件?   我的意思是,比如說我在U盤里面存了三個(gè)文件,當(dāng)我操作第二個(gè)文件后,追加了一個(gè)扇區(qū)的數(shù)據(jù)進(jìn)去,這樣的話,增加的數(shù)據(jù)會(huì)不會(huì)可能把我第三個(gè)文件的數(shù)據(jù)給覆蓋了!   我對(duì)文件系統(tǒng)了解的不是很多,所以想問以下這個(gè)弱弱的問題,呵呵^_^!

恭喜 能告訴下什么原因造成的嗎? 追加的數(shù)據(jù)只會(huì)在你操作文件的末尾,不會(huì)對(duì)其它文件造成影響的


這個(gè)問題是有點(diǎn)弱


呵呵!是有點(diǎn)弱!現(xiàn)在明白了! 但是有一個(gè)問題,為什么我讀文件都正常,但是寫文件的時(shí)候,有時(shí)候?qū)懙揭话氲臅r(shí)候死了,是不是讀文件和寫文件要求的時(shí)序不一樣?而且我通過主板創(chuàng)建的文件,可以通過主板讀出來,并能讀出文件信息,但是在電腦上,只能顯示文件名,里面數(shù)據(jù)都是空的,文件信息也沒有顯示,并且通過電腦根本就不能刪除該文件!   為什么我通過電腦拷貝的文件可以通過主板讀出來,而通過主板寫入文件,電腦卻不能識(shí)別呢?請(qǐng)問以下哪位知道是原因引起的嗎?


這個(gè)估計(jì)和你時(shí)序上面還有點(diǎn)關(guān)系,你把你的延時(shí)子程序減小點(diǎn)試下


我先看看是不是時(shí)序的問題,想問問:從主板寫進(jìn)的文件,通過電腦刪除文件時(shí),提示"無法刪除文件:無法讀源文件或磁盤",是不是還要設(shè)置磁盤,才能讓電腦識(shí)別出來?


不需要設(shè)置U盤,有可能是這樣的,實(shí)際的你的文件是寫下去了,FAT表也更新了,但是目錄項(xiàng)并沒有按照FAT的信息來更新文件,導(dǎo)致計(jì)算機(jī)讀取文件的時(shí)候出錯(cuò)


那怎么設(shè)置,才能使得電腦可以識(shí)別文件呢? 另外,我沒有改時(shí)序,但是我重復(fù)出來了寫文件的問題如下: 如果我文件流程如下: (1)創(chuàng)建文件->寫文件->關(guān)閉文件: 則第二次再寫同一個(gè)文件基本上寫不進(jìn)去; (2)判斷文件是否存在->存在就刪除文件->創(chuàng)建文件->寫文件->關(guān)閉文件:后面再寫,有時(shí)候可以寫進(jìn)去,有時(shí)候多寫幾次,就寫不進(jìn)去了; (3)我在控制面板上專門編寫一個(gè)刪除文件的控制處理,如果文件發(fā)送后,我就直接把該文件刪除,則一直都可以成功的寫入!   而且經(jīng)過反復(fù)多次實(shí)驗(yàn),我發(fā)現(xiàn)只要不寫同樣的文件名的文件,則一直都可以正常寫入文件,只是電腦一直都不能正常的識(shí)別文件!   我估計(jì)還是跟創(chuàng)建文件,刪除文件等有關(guān)系,所以請(qǐng)問一下HCN,你認(rèn)為是什么問題引起的呢?


建議你把程序發(fā)過來看下,主要看你的程序流程上面有沒有問題,以及部分程序的處理上面


INT8U bRdSDRAMToUDisk(void) { //BF_FileAttribute *pFileProp; P_FAT_DIR_INFO mFileDir; BMCmdFileStart fileHead; BSchedule TmpSchedule; INT32U uiFileIndex, uiSizeRead = 0, ulTmpData = 0; INT8U ucErr, ucSectorCount, ucFlag = 1;//, ucCharNum; INT32S iErr, i;

uiFileIndex = bfGetCurrentFileIndex(); bfOpenFile(uiFileIndex, 0, &g_pFile); bfReadFile(g_pFile, (INT8U *)&fileHead, BMCMD_FILE_START_SIZE, &uiSizeRead); bfCloseFile(g_pFile); bfOpenFile(uiFileIndex, 0, &g_pFile);

//ucErr = CreateDirectory( ); mCmdParam.Create.mPathName[0] = '/'; for(i = 0; i < 8; i++) { mCmdParam.Create.mPathName[i + 1] = fileHead.ucFileName[i]; if((fileHead.ucFileName[i] == '\0') || (fileHead.ucFileName[i] == '.')) { break; } } //ucCharNum = strlen((char *)fileHead.ucFileName); if(fileHead.ucFileName[i - 1] == '.') { mCmdParam.Create.mPathName[i ] = 'u'; mCmdParam.Create.mPathName[i + 1] = 'l'; mCmdParam.Create.mPathName[i + 2] = 'e'; mCmdParam.Create.mPathName[i + 3] = '\0'; } else { mCmdParam.Create.mPathName[i + 1] = '.'; mCmdParam.Create.mPathName[i + 2] = 'u'; mCmdParam.Create.mPathName[i + 3] = 'l'; mCmdParam.Create.mPathName[i + 4] = 'e'; mCmdParam.Create.mPathName[i + 5] = '\0'; } bCheckFileExist((INT8U*)&mCmdParam.Create.mPathName[0]); ucErr = CH375FileCreate(); if(ucErr == ERR_SUCCESS) { TmpSchedule.ulLast = 0; TmpSchedule.ulAll = fileHead.uiFileSize; TmpSchedule.ulStep = fileHead.uiFileSize / 100;

if(fileHead.uiFileSize > FILE_DATA_BUF_LEN) { ucSectorCount = (FILE_DATA_BUF_LEN >> 9); while(1) { iErr = bfReadFile(g_pFile, (INT8U *)&FILE_DATA_BUF[0], FILE_DATA_BUF_LEN, &uiSizeRead); if(iErr == BFERR_FILE_NOT_OPENED_FOR_READ) { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"文件未打開!"); #else #ifdef __LANGUAGE_SPANISH__ GUI_MsgBox((INT8U *)"No est?listo para lectura"); #else GUI_MsgBox((INT8U *)"The file is not open!"); #endif #endif delay(0x00500000); ucFlag = 0; break; } else { mCmdParam.Write.mSectorCount = ((uiSizeRead + 511) >> 9); if(mCmdParam.Write.mSectorCount) { ucErr = CH375FileWrite( ); if(ucErr == ERR_SUCCESS) { ulTmpData += uiSizeRead; TmpSchedule.ulCurrent = ulTmpData; GUI_DrawScheduleBar(32, 38, (BSchedule *)&TmpSchedule); } else { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"存儲(chǔ)文件失敗!"); #else #ifdef __LANGUAGE_SPANISH__ GUI_MsgBox((INT8U *)"?rror al guardar archivo!"); #else GUI_MsgBox((INT8U *)"Failed to store the file!"); #endif #endif delay(0x00500000); ucFlag = 0; break; } } if(mCmdParam.Write.mSectorCount < ucSectorCount) { break; } } } } else { iErr = bfReadFile(g_pFile, (INT8U *)&FILE_DATA_BUF[0], FILE_DATA_BUF_LEN, &uiSizeRead); if(iErr == BFERR_FILE_NOT_OPENED_FOR_READ) { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"文件未打開!"); #else #ifdef __LANGUAGE_SPANISH__ GUI_MsgBox((INT8U *)"No est?listo para lectura"); #else GUI_MsgBox((INT8U *)"The file is not open!"); #endif #endif delay(0x00500000); ucFlag = 0; } else { mCmdParam.Write.mSectorCount =((uiSizeRead + 511 ) >> 9); ucErr = CH375FileWrite( ); if(ucErr == ERR_SUCCESS) { ulTmpData += uiSizeRead; TmpSchedule.ulCurrent = ulTmpData; GUI_DrawScheduleBar(32, 38, (BSchedule *)&TmpSchedule); } else { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"存儲(chǔ)文件失敗!"); #else #ifdef __LANGUAGE_SPANISH__ GUI_MsgBox((INT8U *)"?rror al guardar archivo!"); #else GUI_MsgBox((INT8U *)"Failed to store the file!"); #endif #endif delay(0x00500000); ucFlag = 0; } } } ucErr = CH375FileQuery( ); if(ucErr == ERR_SUCCESS) { mFileDir = (P_FAT_DIR_INFO)( (INT8U *)(&DISK_BASE_BUF[0]) + CH375vFdtOffset ); mFileDir->DIR_CrtDate = MAKE_FILE_DATE(fileHead.Time.usYear, fileHead.Time.ucMonth, fileHead.Time.ucDay); mFileDir->DIR_CrtTime = MAKE_FILE_TIME(fileHead.Time.ucHour, fileHead.Time.ucMin, fileHead.Time.ucSec); mFileDir->DIR_LstAccDate = MAKE_FILE_DATE(fileHead.Time.usYear, fileHead.Time.ucMonth, fileHead.Time.ucDay); } mCmdParam.Modify.mFileAttr = 0x20; // 存檔文件 mCmdParam.Modify.mFileTime = MAKE_FILE_TIME(fileHead.Time.ucHour, fileHead.Time.ucMin, fileHead.Time.ucSec); mCmdParam.Modify.mFileDate = MAKE_FILE_DATE(fileHead.Time.usYear, fileHead.Time.ucMonth, fileHead.Time.ucDay); mCmdParam.Modify.mFileSize = fileHead.uiFileSize; ucErr = CH375FileModify( ); /* 修改當(dāng)前文件的信息,修改日期和長(zhǎng)度 */ if(ucErr != ERR_SUCCESS) { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"文件屬性修改失敗!"); #else GUI_MsgBox((INT8U *)"Failed to modify attribute!"); #endif delay(0x00500000); ucFlag = 0; } } mCmdParam.Close.mUpdateLen = 0; ucErr = CH375FileClose( ); bfCloseFile(g_pFile); gSystem.ulSysStatus[gSystem.ulSysStatusCur] = STATUS_WAITING; g_pCurMenu = g_pRootM->child; //將系統(tǒng)界面切換到主界面 chenaihua 2006-03-11 g_pCurWin = g_pCurMenu->pWin; GUI_UpdataWindow(); return ucFlag; }

void bCheckFileExist(INT8U* pFilePath) { INT8U i, ucErr;

for(i = 0; i < MAX_PATH_LEN ; i++) { mCmdParam.Open.mPathName[i] = mCmdParam.Create.mPathName[i]; if(mCmdParam.Create.mPathName[i] == '\0') break; } ucErr = CH375FileOpen(); if(ucErr == ERR_SUCCESS) { for(i = 0; i < MAX_PATH_LEN ; i++) { mCmdParam.Erase.mPathName[i] = mCmdParam.Create.mPathName[i]; if(mCmdParam.Create.mPathName[i] == '\0') break; } ucErr = CH375FileErase( ); if(ucErr == ERR_SUCCESS) { bListAll(); } } }


文件名應(yīng)該大寫,小寫電腦不能打開 if(fileHead.ucFileName[i - 1] == '.') { mCmdParam.Create.mPathName[i ] = 'U'; mCmdParam.Create.mPathName[i + 1] = 'L'; mCmdParam.Create.mPathName[i + 2] = 'E'; mCmdParam.Create.mPathName[i + 3] = '\0'; } else { mCmdParam.Create.mPathName[i + 1] = '.'; mCmdParam.Create.mPathName[i + 2] = 'U'; mCmdParam.Create.mPathName[i + 3] = 'L'; mCmdParam.Create.mPathName[i + 4] = 'E'; mCmdParam.Create.mPathName[i + 5] = '\0'; }


大寫用過了,不行


你首先這樣做下,用自動(dòng)更新文件長(zhǎng)度來做下,也就是你的查詢文件信息以及更新文件長(zhǎng)度的程序不要,其次就是將你的子函數(shù)的延時(shí)減小,在有就是上面的問題,如果你的主文件名或者擴(kuò)展名為小寫的話,那是沒辦法打開的


我試過了,主文件名是要大寫,才支持,但是中文文件名字的話,在電腦上可以刪除,但是打開文件的時(shí)候里面是空的,顯示的文件大小又是對(duì)的


那你用WINHEX這個(gè)軟件看下你的U盤的FAT表有沒有更新,如果沒有更新的話,那就是你寫函數(shù)那邊出了問題


請(qǐng)問一下:WINHEX這個(gè)軟件 是什么軟件?我沒有找到


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

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