用2407搭配ch375,將程序燒寫(xiě)到flash中后斷電,家電,讀寫(xiě)u盤(pán)正常,斷電再加電,程序就不正常了,出現(xiàn)莫名奇妙的問(wèn)題。不是初始化375不過(guò),就是打開(kāi)文件或創(chuàng)建文件錯(cuò)誤。重新燒寫(xiě)后,又是同樣的問(wèn)題。頭疼中
不用頭疼,第一次成功,至少說(shuō)明軟硬件基本上都沒(méi)什么問(wèn)題。 (1)第二次運(yùn)行時(shí),哪步出錯(cuò),出錯(cuò)代碼是什么? (2)試試第一次操作完,等待時(shí)間長(zhǎng)一點(diǎn),再上電看看是否可行
最多的是打開(kāi)文件或者創(chuàng)建新文件是出錯(cuò),返回代碼是2,就是參數(shù)錯(cuò)誤。我查了下,好像是存文件名的數(shù)組中的內(nèi)容不對(duì),是亂碼。
問(wèn)題不是找到么!文件名的數(shù)組中的內(nèi)容不對(duì),打開(kāi)或創(chuàng)建文件自然是出錯(cuò)了。 應(yīng)重點(diǎn)分析一下文件名的數(shù)組中的內(nèi)容為何不對(duì),文件名的賦值是否正確,文件名緩沖區(qū)是否有問(wèn)題呢?
strcpy(fat_cmd.create.buffer,"\\TEST.TXT"); sts4=fat_fcreate(F_CREATE_NEW); 這就是我的文件名賦值,fat_cmd.create.buffer是fat.h中定義的。而且第一次運(yùn)行沒(méi)問(wèn)題啊。
好像第二次運(yùn)行時(shí),strcpy函數(shù)總出錯(cuò),誰(shuí)知道是什么問(wèn)題啊,我改成這樣 strcpy(filename,"\\TEST.TXT"); strcpy(fat_cmd.create.buffer,filename); sts4=fat_fcreate(F_CREATE_NEW); 第一次運(yùn)行沒(méi)問(wèn)題,第二次運(yùn)行時(shí),filename中的內(nèi)容就變成亂碼了。我用的是2407,怎么回事啊。
如果strcpy函數(shù)有問(wèn)題,您干脆直接手動(dòng)賦值試試,如: fat_cmd.create.buffer[ 0 ] = '\\'; fat_cmd.create.buffer[ 1 ] = 'T'; fat_cmd.create.buffer[ 2 ] = 'E'; fat_cmd.create.buffer[ 3 ] = 'S'; fat_cmd.create.buffer[ 4 ] = 'T'; fat_cmd.create.buffer[ 5 ] = '.'; fat_cmd.create.buffer[ 6 ] = 'T'; fat_cmd.create.buffer[ 7 ] = 'X'; fat_cmd.create.buffer[ 8 ] = 'T'; fat_cmd.create.buffer[ 9 ] = 0;
還是不對(duì),是不是ram不夠啊
fat_cmd.create.buffer[ 0 ] = '\\'; fat_cmd.create.buffer[ 1 ] = 'T'; fat_cmd.create.buffer[ 2 ] = 'E'; fat_cmd.create.buffer[ 3 ] = 'S'; fat_cmd.create.buffer[ 4 ] = 'T'; fat_cmd.create.buffer[ 5 ] = '.'; fat_cmd.create.buffer[ 6 ] = 'T'; fat_cmd.create.buffer[ 7 ] = 'X'; fat_cmd.create.buffer[ 8 ] = 'T'; fat_cmd.create.buffer[ 9 ] = 0; 這樣改了后,打開(kāi)文件沒(méi)問(wèn)題了,但是完txt文件中寫(xiě)數(shù),還是要用到strcpy函數(shù)啊,2407還不支持sprintf函數(shù) ,怎么辦啊
照您的說(shuō)法,那么與我們提供給您的文件系統(tǒng)沒(méi)關(guān)系了,且與2407芯片也沒(méi)關(guān)系,主要原因在于您所用的編譯器了,只能咨詢編譯器的技術(shù)支持了,其實(shí)您也可以自己寫(xiě)一個(gè)類似于strcpy的函數(shù),如: UINT8 mCopyString( UINT8 *iDestination, UINT8 *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }