ch374s列舉,寫文件出錯(cuò)

/***************************************************************************/ #include #include #include #include /***************************************************************************/

#define LIB_CFG_INT_EN 0 /* CH374的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */

#define CH374_IDX_PORT_ADDR 0xBDF1 /* CH374索引端口的I/O地址 */ #define CH374_DAT_PORT_ADDR 0xBCF0 /* CH374數(shù)據(jù)端口的I/O地址 */ /* 62256提供的32KB的RAM分為兩部分: 0000H-01FFH為磁盤讀寫緩沖區(qū), 0200H-7FFFH為文件數(shù)據(jù)緩沖區(qū) */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長(zhǎng)度為SECTOR_SIZE */

#define CH374_INT_WIRE INT0 /* P3.2, INT0, CH374的中斷線INT#引腳,連接CH374的INT#引腳,用于查詢中斷狀態(tài) */ /* 如果未連接CH374的中斷引腳,那么應(yīng)該去掉上述定義,自動(dòng)使用寄存器查詢方式 */ //#define FILE_DATA_BUF_ADDR 0x200

#define DISK_BASE_BUF_LEN 2048/* 默認(rèn)的磁盤數(shù)據(jù)緩沖區(qū)大小為512字節(jié),建議選擇為2048甚至4096以支持某些大扇區(qū)的U盤,為0則禁止在.H文件中定義緩沖區(qū)并由應(yīng)用程序在pDISK_BASE_BUF中指定 */ /* 如果需要復(fù)用磁盤數(shù)據(jù)緩沖區(qū)以節(jié)約RAM,那么可將DISK_BASE_BUF_LEN定義為0以禁止在.H文件中定義緩沖區(qū),而由應(yīng)用程序在調(diào)用CH375Init之前將與其它程序合用的緩沖區(qū)起始地址置入pDISK_BASE_BUF變量 */

//#define NO_DEFAULT_CH374_F_ENUM 1 /* 未調(diào)用CH374FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH374_F_QUERY 1 /* 未調(diào)用CH374FileQuery程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH374_RESET 1 /* 未調(diào)用CH374Reset程序故禁止以節(jié)約代碼 */

#include "CH374HF6.H"

#ifdef __C51__ #pragma NOAREGS #endif /***************************************************************************/ sbit run=P1^0; sbit read=P1^1; sbit beep=P1^2; /***************************************************************************/ UINT8 i,c,SecCount; //對(duì)374操作是否成功,顯示其狀態(tài) UINT32 TotalCount; UINT16 FlashAdd; UINT32 FileSize; UINT32 FileSizetemp; UINT32 NewSize; UINT8X my_buffer[0x1000]; UINT8X w040buffer[0x3000]; //---------------------------------------------------- /* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; }

void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯(cuò)誤 */ /* 遇到錯(cuò)誤后,應(yīng)該分析錯(cuò)誤碼以及CH374DiskStatus狀態(tài),例如調(diào)用CH374DiskConnect查詢當(dāng)前U盤是否連接,如果U盤已斷開那么就重新等待U盤插上再操作, 建議出錯(cuò)后的處理步驟: 1、調(diào)用一次CH374DiskReady,成功則繼續(xù)操作,例如Open,Read/Write等,在CH374DiskReady中會(huì)自動(dòng)調(diào)用CH374DiskConnect,不必另外調(diào)用 2、如果CH374DiskReady不成功,那么強(qiáng)行將CH374DiskStatus置為DISK_CONNECT狀態(tài),然后從頭開始操作(等待U盤連接CH374DiskConnect,CH374DiskReady等) */ while ( 1 ) { run=0; CH374DelaymS( 100 ); run=1; CH374DelaymS( 100 ); } } /***************************************************************************/ void main(void) {

UINT32 i; UINT16 j; PUINT8X pDISKBUF; CHPCON &=0xE3;//禁止片內(nèi)XRAM mInitSTDIO( ); run=0; //CH374Reset(); i=CH374LibInit(); mStopIfError(i); printf("CH374S Initial Is Ok!\n"); CH374DelaymS(50); i=CH374DiskConnect(); //check connect mStopIfError(i ); printf("USB disk connect.\n"); CH374DelaymS(200); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ printf( "Ready ?\n" );

for(TotalCount=0;TotalCount<5;TotalCount++) { //最長(zhǎng)等待時(shí)間 5*50mS CH374DelaymS( 50 ); i=CH374DiskReady(); mStopIfError(i ); printf("USB disk ready.\n");break; } //-------------------------------------------------獲取U盤大小 printf("Get USB store size!!!"); i = CH374DiskSize( ); mStopIfError(i ); printf( "TotalSize = %u MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec * ( CH374vSectorSize / 512 ) >> 11 ) ); //顯示為以MB為單位的容量

//--------------------------------------------------列舉文件 for ( c=0; c<254; c++ ) { /* 最多搜索前254 個(gè)文件 */ strcpy( mCmdParam.Enumer.mPathName, "\\*" );/* 在C51 子目錄下搜索以CH374 開頭的文件名,*為通配符 */ i = strlen( mCmdParam.Enumer.mPathName ); /* 計(jì)算文件名長(zhǎng)度,指向結(jié)束符 */ mCmdParam.Enumer.mPathName[i] = c; /* 將結(jié)束符替換為搜索的序號(hào),從0 到254 */ i=CH374FileEnumer( ); /* 文件名中含有通配符*,枚舉/搜索文件而不打開 */ if ( i==ERR_MISS_FILE ) break; /* 再也搜索不到匹配文件,已經(jīng)沒有匹配的文件名 */ if ( i!=ERR_SUCCESS ) break; /* 出錯(cuò) */ printf( "found name %d#: %s\n", (unsigned int)c, mCmdParam.Enumer.mPathName ); /* 搜索到相匹配的文件名,顯示序號(hào)和搜索到的匹配文件名或者子目錄名 */ }

//---------------------------------------------------打開文件 printf("\n"); printf( "Open\n" ); strcpy(mCmdParam.Open.mPathName, "\\CH374.TXT" ); i= CH374FileOpen(); /* 打開文件 */ mStopIfError(i ); printf("open file success!\n");

//----------------------------------------------------讀取文件 read=0; i=CH374vFileSize/1024; printf( "File size = %lu k\n",i); /* 在成功打開文件后,全局變量CH374vFileSize中是文件當(dāng)前長(zhǎng)度 */ printf("Read And Print Data:\n"); TotalCount=(1048576*2); FlashAdd=0; FileSize=0; FileSizetemp=CH374vFileSize; while(1){ if(CH374vFileSize<2048){CH374vFileSize=2048;break;} i=CH374vFileSize%2048; if(i!=0){CH374vFileSize +=i;break;} break;}

mCmdParam.Locate.mSectorOffset=0; i=CH374FileLocate( ); //移動(dòng)文件指針 mStopIfError( i );

while(TotalCount){ if(FileSize==FileSizetemp)break; mCmdParam.ReadX.mSectorCount=4;//4*512 TotalCount -=2048; printf("\n"); printf( "%lu\n",TotalCount); mCmdParam.ReadX.mDataBuffer=my_buffer; i = CH374FileReadX( ); mStopIfError(i); mCmdParam.ReadX.mDataBuffer=my_buffer; //---------------------------------------------------------------讀取成功顯示 for( i=0; i<2048; i++ ){

printf( "%c",mCmdParam.ReadX.mDataBuffer[i]); if((i!=0)&&(i+1)%64==0)printf("\n"); FileSize +=1; //if(mCmdParam.ReadX.mSectorCount<4){goto readend;} if(FileSize==FileSizetemp){ printf("\n"); printf("FileSize=%lu\n",FileSize); printf("File Data End!\n"); break; } } } //--------------------------------------------------模擬寫Flash W29c040 /* for(i=0;i<4096;i++){ w040buffer[FlashAdd] =mCmdParam.ReadX.mDataBuffer[i]; FlashAdd +=1; if((i!=0)&&(i%256)==0){CH374DelaymS(10);} FileSize +=1; if(FileSize==FileSizetemp){ printf("\n"); printf("FileSize=%lu\n",FileSize); printf("File Data End!\n"); goto readend; } if(mCmdParam.ReadX.mSectorCount<8){goto readend;} } } */ CH374vFileSize=FileSizetemp;//恢復(fù)文件長(zhǎng)度 //---------------------------------------------------------------讀取完成 printf("\n"); printf("Read Data Ok!\n"); read=1; //---------------------------------------------------------------關(guān)閉文件 // printf("Close File!\n"); i=CH374FileClose(); mStopIfError(i); // printf("Close File Success!\n");

//------------------------------------------檢測(cè)外部ram pDISKBUF =&my_buffer[0]; for(i=0;i<4096;i++) //2M { *pDISKBUF='m'; pDISKBUF++; } //---------------------------------------------------------------創(chuàng)建文件 printf( "Create\n" ); strcpy( mCmdParam.Create.mPathName, "\\NEW3.TXT" ); /* 新文件名,在根目錄下 */ i = CH374FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); printf("Create Ok!\n"); printf( "Write\n" ); for(j=0;j<256;j++){

列舉和寫文件返回什么錯(cuò)誤代碼,列舉文件要改一下: i = strlen( mCmdParam.Enumer.mPathName ); /* 計(jì)算文件名長(zhǎng)度,指向結(jié)束符 */ CH374vFileSize=c ; mCmdParam.Enumer.mPathName [i]= 0xff; /* 將結(jié)束符替換為搜索的序號(hào),從0 到254 */ 其它的沒有什么問(wèn)題.


沒有返回錯(cuò)誤代碼,都能通過(guò). 創(chuàng)建的文件打不開,提示文件已損壞無(wú)法讀取.


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

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