創(chuàng)建了一個"/AD.TXT\0"的文件,可以寫數(shù)據(jù);但是關(guān)閉后再打開時候出現(xiàn)錯誤,
顯示的是:文件并沒有被正確打開
顯示的是:
創(chuàng)建一個TXT文件成功!
需要寫入TXT的數(shù)據(jù)量為:24
TXT文本數(shù)據(jù)寫入成功!
TXT文本創(chuàng)建并寫入完成!
文件打開成功!
文件定位失敗--180
我的文件setfilename程序:
void CH376SetFileName( alt_8 *Name )?
{
? ? alt_u8 ?i;?
? ? alt_8 ?c; ?
? ? for( i = 40; i != 0; --i )?
? ? {
? ? ? ? c = *Name;
? ? ? ? write_data_to_usb( c );
? ? ? ? if( c == 0 )?
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? Name ++;
? ? }
}
主程序:
//新建一個名為AD.TXT的文件
? ? printf("\n創(chuàng)建一個TXT文件");
? ? write_command_to_usb(SET_FILE_NAME);//送“設(shè)置文件名”命令
? ? CH376SetFileName("/AD.TXT\0");
? ? write_command_to_usb(FILE_CREATE); ?//送“新建文件”命令
? ? while(ch375_intflag != 1); ?//等待中斷產(chǎn)生
? ? ch375_intflag = 0; ?//清除CH376中斷標(biāo)志位
? ? if(ch375_status == USB_INT_SUCCESS) //請求繼續(xù)寫入
? ? {
? ? ? ? printf("成功!\n");
? ? }
? ? else
? ? {
? ? ? ? printf("失敗--%d\n",ch375_status);
? ? ? ? while(1);
? ? }
? ? //往新建文件寫入一串?dāng)?shù)據(jù)“AD數(shù)據(jù)采集實(shí)時存儲:”
? ? write_command_to_usb(BYTE_WRITE); ? //以字節(jié)為單位從當(dāng)前位置寫入數(shù)據(jù)塊
? ? write_data_to_usb(24); ?
? ? write_data_to_usb(0);
? ? while(ch375_intflag != 1); ?//等待中斷產(chǎn)生
? ? ch375_intflag = 0; ?//清除CH376中斷標(biāo)志位
? ? if(ch375_status == USB_INT_DISK_WRITE) ?//請求繼續(xù)寫入
? ? {
? ? ? ? write_command_to_usb(WR_REQ_DATA); ?//向內(nèi)部指定緩沖區(qū)寫入請求的數(shù)據(jù)塊
? ? ? ? printf("需要寫入TXT的數(shù)據(jù)量為:%d\n",read_data_from_usb());
? ? }
? ? else
? ? {
? ? ? ? printf("\nTXT文本數(shù)據(jù)寫入失敗--%d\n",ch375_status);
? ? ? ? while(1);
? ? }
? ? //send_string_to_usb1("AD數(shù)據(jù)采集實(shí)時存儲:\r\n");?
? ? send_string_to_usb("AD數(shù)據(jù)采集實(shí)時存儲:\r\n",20+4); ? ? //送字符串“AD數(shù)據(jù)采集實(shí)時存儲:”
? ? write_command_to_usb(BYTE_WR_GO); ? //繼續(xù)字節(jié)寫
? ? while(ch375_intflag != 1); ?//等待中斷產(chǎn)生
? ? ch375_intflag = 0; ?//清除CH376中斷標(biāo)志位
? ? if(ch375_status == USB_INT_SUCCESS) //請求繼續(xù)寫入
? ? {
? ? ? ? printf("TXT文本數(shù)據(jù)寫入成功!\n");
? ? }
? ? else
? ? {
? ? ? ? printf("TXT文本數(shù)據(jù)寫入失敗--%d\n",ch375_status);
? ? ? ? while(1);
? ? }
? ? write_command_to_usb(FILE_CLOSE); ? //關(guān)閉當(dāng)前已經(jīng)打開的文件或目錄
? ? write_data_to_usb(1); ? //允許自動更新文件長度
? ? printf("TXT文本創(chuàng)建并寫入完成!\n\n"); ?
? ? ? ? ? ??
? ? ? ? ? ? write_command_to_usb(SET_FILE_NAME);//送“設(shè)置文件名”命令?
? ? ? ? ? ? CH376SetFileName("/AD.TXT\0");
? ? ? ? ? ? write_command_to_usb(FILE_OPEN); ? ?//送“打開文件或目錄,枚舉文件和目錄”命令
? ? ? ? ? ? while(ch375_intflag != 1); ?//等待中斷產(chǎn)生
? ? ? ? ? ? ch375_intflag = 0; ?//清除CH376中斷標(biāo)志位
? ? ? ? ? ? if(ch375_status == USB_INT_SUCCESS) //請求繼續(xù)寫入
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("文件打開成功!\n");
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("文件打開失敗--%d\n",ch375_status);
? ? ? ? ? ? ? ? while(1);
? ? ? ? ? ? }
我試了一下,
write_command_to_usb(SET_FILE_NAME);//送“設(shè)置文件名”命令?
? ? ? ? ? ? CH376SetFileName("/AD.TXT\0");
? ? ? ? ? ? write_command_to_usb(FILE_OPEN); ? ?//送“打開文件或目錄,枚舉文件和目錄”命令
改成:
write_command_to_usb(SET_FILE_NAME);//送“設(shè)置文件名”命令?
? ? ? ? ? ? CH376SetFileName("/A.TXT\0");
? ? ? ? ? ? write_command_to_usb(FILE_OPEN); ? ?//送“打開文件或目錄,枚舉文件和目錄”命令
顯示的也是:
文件打開成功!
能解釋一下是為什么么?
你的設(shè)置文件名有問題,寫入文件名的時候你寫多了,應(yīng)該加上判斷條件if ( c == '\' || c == '/' ) c = 0; //強(qiáng)行截止文件名。
試了一下用下面的程序:
void CH376SetFileName( alt_8 *Name )?
{
? ? alt_8 ?c; ?
????c = *Name;
? ? write_data_to_usb( c );
? ? while ( c ) {
? ? ? ? Name ++;
? ? ? ? c = *Name;
? ? ? ? if ( c == 0x2F || c == 0x5C ) c = 0; ?/* 強(qiáng)行將文件名截止 */
? ? ? ? write_data_to_usb( c );
? ? }
}
還是出現(xiàn)同樣的現(xiàn)象!
我們的函數(shù)在FILE_SYS.C里面有現(xiàn)成的函數(shù),你試下有沒有問題。
試了,我用的就是貴公司提供的例程。
文件可以創(chuàng)建成功,創(chuàng)建成功后進(jìn)行寫數(shù)據(jù)、定位都可以。但是關(guān)閉之后就不能再打開了,不知道為什么?
現(xiàn)在發(fā)現(xiàn)一個問題,如果前面關(guān)閉文件后,不更新文件長度,那么就能打開文件定位成功。
? ? write_command_to_usb(FILE_CLOSE); ? //關(guān)閉當(dāng)前已經(jīng)打開的文件或目錄
? ? write_data_to_usb(0); ? //允許自動更新文件長度
? ? printf("TXT文本創(chuàng)建并寫入完成!\n"); ?