用avr m16測(cè)試CH375,有問題請(qǐng)教

[font=新宋體][size=4]1,按照例子中的方法:

strcpy( (char *)mCmdParam.Create.mPathName, "TEST.TXT" ); CH375FileCreate( ); pCodeStr = (UINT8 *)"TEST........"; while( 1 ) { for ( i=0; i c = *pCodeStr; mCmdParam.ByteWrite.mByteBuffer[i] = c; if ( c == 0 ) break; pCodeStr++; } if ( i == 0 ) break; mCmdParam.ByteWrite.mByteCount = i; i = CH375ByteWrite( ); } mCmdParam.Close.mUpdateLen = 1; CH375FileClose( );

如果這一句:pCodeStr = (UINT8 *)"TEST........"; 中字符串比較長(zhǎng),就會(huì)出現(xiàn)錯(cuò)誤,這是因?yàn)镸16的RAM空間不夠?qū)е碌膯?那么我想用字節(jié)方式寫入比較長(zhǎng)的數(shù)據(jù)應(yīng)如何實(shí)現(xiàn)最好?

2,我先用CH375ByteRead();讀出某文件的數(shù)據(jù),再在新建文件的時(shí)候把讀出的數(shù)據(jù)賦給ByteWrite的緩沖區(qū),然后把數(shù)據(jù)寫入新建的文件,這樣也會(huì)出錯(cuò),是因?yàn)槲业拇疟P數(shù)據(jù)緩沖區(qū)太小嗎?我設(shè)置的磁盤數(shù)據(jù)緩沖去為512,要是我用RAM大點(diǎn)的單片機(jī),把磁盤數(shù)據(jù)緩沖區(qū)設(shè)置大些,那么還是用這種方法會(huì)有問題嗎?

3,#if DISK_BASE_BUF_LEN == 0 pDISK_BASE_BUF = &my_buffer[0];

/* 不在.H文件中定義CH375的專用緩沖區(qū),而是用緩沖區(qū)指針指向其它應(yīng)用程序的緩沖區(qū)便于合用以節(jié)約RAM */

#endif

這個(gè)具體怎么用啊,我的理解是自己在應(yīng)用程序中先聲明DISK_BASE_BUF_LEN == 0 然后定義my_buffer[],可試過是不行的!

[/size][/font]

4,查詢方式和中段方式都只是要來判斷U盤連接或斷開狀態(tài)的嗎?還是在頭文件中提供的xQueryInterrupt( )和CH375Interrupt( )這兩個(gè)函數(shù)只是給了CH375DiskConnect( void )調(diào)用了?然而子函數(shù)庫中提供的很多函數(shù)本身應(yīng)該是工作在查詢方式,而且不會(huì)調(diào)用 xQueryInterrupt( )這個(gè)函數(shù)的,那這里個(gè)函數(shù)到底還有什么用途啊?


5,我用下面的程序把U盤中原有的一個(gè)TXT文件的內(nèi)容復(fù)制到另一個(gè)新建的文件里頭:

strcpy( (char *)mCmdParam.Open.mPathName, "/FILEA.TXT" ); CH375FileOpen(); sizetemp=CH375vFileSize; CH375FileClose();

strcpy((char *)mCmdParam.Create.mPathName, "/FILEB.TXT"); CH375FileCreate(); mCmdParam.Close.mUpdateLen = 1; CH375FileClose( );

for(i=0;i<(sizetemp+MAX_BYTE_IO-1)/MAX_BYTE_IO;i++){ strcpy( (char *)mCmdParam.Open.mPathName, "/FILEA.TXT" ); CH375FileOpen(); mCmdParam.ByteLocate.mByteOffset=i*MAX_BYTE_IO; CH375ByteLocate(); mCmdParam.ByteRead.mByteCount=MAX_BYTE_IO; CH375ByteRead(); realcount=mCmdParam.ByteRead.mByteCount; for(j=0;jmydatabuf[j]=mCmdParam.ByteRead.mByteBuffer[j]; } CH375FileClose();

strcpy( (char *)mCmdParam.Open.mPathName, "/FILEB.TXT" ); CH375FileOpen(); mCmdParam.ByteLocate.mByteOffset=0xffffffff; CH375ByteLocate(); for(j=0;jmCmdParam.ByteWrite.mByteBuffer[j]=mydatabuf[j]; } mCmdParam.ByteWrite.mByteCount=realcount; CH375ByteWrite(); CH375FileClose();

if(realcount } 假定參數(shù)變量都正確定義;

這程序有錯(cuò)誤的地方嗎?為什么不能正確實(shí)現(xiàn)啊?

只要我操作稍微大一點(diǎn)的文件就會(huì)出錯(cuò),仔細(xì)觀察,要是出錯(cuò)了U盤的數(shù)據(jù)燈就會(huì)不停的暗閃(不仔細(xì)看還看不出來)!


1.如果用字節(jié)方式寫入比較長(zhǎng)的數(shù)據(jù),可以修改MAX_BYTE_IO的大小,但不得大于255,還有你的RAM空間要足夠的大. 2.和你的磁盤數(shù)據(jù)緩沖區(qū)的大小沒有關(guān)系. 3.要先聲明DISK_BASE_BUF_LEN == 0,在定義my_buffer[512];并且把pDISK_BASE_BUF指向這個(gè)緩沖區(qū). 4.查詢方式或中斷方式不僅用來查詢U盤的連接或者斷開,在讀寫文件的時(shí)候也會(huì)用到中斷.我們的庫會(huì)調(diào)用的 5.操作流程不對(duì),在復(fù)制文件的 時(shí)候, for(j=0;jmydatabuf[j]=mCmdParam.ByteRead.mByteBuffer[j]; } 在多次復(fù)制的時(shí)候 mydatabuf[]緩沖區(qū)中的數(shù)據(jù)不停的被覆蓋了.


樓上的回答好像沒有答出重點(diǎn)哦! 1,用我給出的程序,寫比較短的字符串基本不會(huì)出錯(cuò),但是稍微加長(zhǎng)一點(diǎn)就出錯(cuò)了! 2,這個(gè)問題原來和第5個(gè)是一樣的!-.- 3,要先聲明DISK_BASE_BUF_LEN == 0,在定義my_buffer[512];并且把pDISK_BASE_BUF指向這個(gè)緩沖區(qū). 似乎我就是用這種方法的,可是編譯不過! 4,可是在頭文件里給出的默認(rèn)的程序只是在檢查U判斷連接或者斷開,那么就算庫的其他程序調(diào)用它也是在檢查U盤斷開與否 5,你指出的錯(cuò)誤是我不小心寫錯(cuò)了,實(shí)際的程序沒有這種錯(cuò)誤,就算修改了這個(gè)錯(cuò)誤也不行啊! 而且我發(fā)現(xiàn)很多出錯(cuò)時(shí),U盤的數(shù)據(jù)燈就會(huì)不停的閃爍!


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

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