大家看我的程序有問題嗎?

UINT8 i; //mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/MY_ADC.TXT" ); strcpy( (char *)mCmdParam.Open.mPathName, "/MY_ADC.TXT" ); i =CH375FileOpen( ); if ( i == ERR_SUCCESS ) { mCmdParam.ByteLocate.mByteOffset = 0xffffffff; // 移到文件的尾部 CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { // mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/MY_ADC.TXT" ); strcpy( (char *)mCmdParam.Create.mPathName, "/MY_ADC.TXT" ); i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); } WriteToReg_ADC(0X38); pstr=Read_ADC16BitValue(); //usart_transmit(pstr); b=pstr&0x0FF; usart_transmit(b); a=pstr>>8; usart_transmit(a); //mCmdParam.ByteWrite.mByteBuffer[0]=b; //mCmdParam.ByteWrite.mByteBuffer[1]=a; //for(i=0;i<2;i++) //{ mCmdParam.ByteWrite.mByteBuffer[h]=b; mCmdParam.ByteWrite.mByteBuffer[h+1]=a; //} h+=2; if(h==30) { mCmdParam.ByteWrite.mByteCount = 28; /* 寫入數(shù)據(jù)的字符數(shù),單次讀寫的長度不能超過MAX_BYTE_IO,第二次調(diào)用時接著剛才的向后寫 */ i = CH375ByteWrite( ); /* 向文件寫入數(shù)據(jù) */ mStopIfError( i ); h=0; }

我用的是字節(jié)讀寫模式,讀來的16位的數(shù)據(jù)高八位給a,低八位給b,然后存入mCmdParam.ByteWrite.mByteBuffer中,如果滿28字節(jié)則寫盤,但是我讀的數(shù)據(jù)不對,請看這程序?qū)幔?/p>

從u盤讀出的數(shù)據(jù)和從串口讀出的數(shù)據(jù)不一樣啊。


按照你上面的程序,應該改成這樣: mCmdParam.ByteWrite.mByteBuffer[h]='b'; mCmdParam.ByteWrite.mByteBuffer[h+1]='a'; 這樣的話,在。TXT文件里面才可以顯示出是b和a,不然的話顯示出來的是亂碼


我這里的b是ad轉(zhuǎn)換的低八位數(shù)據(jù),a是高八位數(shù)據(jù),不能用'b','a'表示,否則顯示出來是b和a 了。


我每次讀取的ad數(shù)值是2字節(jié),我想28字節(jié)寫一次盤,請問我這函數(shù)該如何寫,我上面寫的函數(shù)寫到盤里的數(shù)據(jù)和我串口觀察的數(shù)據(jù)不一致啊。


隨便你自己往U盤里面寫什么數(shù)據(jù),你可以找一個看U盤物理扇區(qū)的計算機端的軟件,你看下你寫下去的數(shù)據(jù)是什么數(shù)據(jù)不就可以了,按照你寫的,b,c是什么形式的數(shù)據(jù)?你根本就沒有進行說明,那我們只能按照你默認的形式寫到文件里面去,你采集的數(shù)據(jù)一次2字節(jié)的話,那么,你可以在新建文件的時候?qū)⑽募?chuàng)建為HEX文件,然后把你采集到的數(shù)據(jù)以16進制的形式存放進去(前提是你采集的數(shù)據(jù)是16進制的)。就不需要什么數(shù)據(jù)轉(zhuǎn)換了


我的a,b都是Uint8型,我現(xiàn)在的問題是感覺寫一次盤要用很多時間,我的采樣率是500hz,我發(fā)現(xiàn)寫進U盤里的數(shù)據(jù)丟失了一部分。我把寫盤放在了中斷里面。中斷里的程序就是上面的程序。


字節(jié)方式寫盤速度是比較慢的.寫進U盤里的數(shù)據(jù)丟失了一部分,是不是你在關閉文件前沒有跟新文件長度


每次寫完斗更新了。 在示波器上觀察,我的采樣率是500hz,那么drdy信號和dout信號的頻率都應該為500hz,但是實際上drdy的頻率為500hz,而dout信號只有50hz左右,即打開文件,讀ad值,寫盤,關閉文件花了大約2ms,感覺很慢啊,丟了好多數(shù)據(jù)啊。


drdy,dout分別表示什么信號,1k/s的速度能達到要求啊


drdy是數(shù)據(jù)準備好的意思,dout就是從ad轉(zhuǎn)換的數(shù)據(jù),也就是采樣率為500hz的話,讀ad一次為2個字節(jié)(16位ad),那么一秒種就1000字節(jié),字節(jié)模式下速度有多快,扇區(qū)模式下有多快?


主要看是什么單片機,51單片機扇區(qū)方式讀能達到200k/s左右,字節(jié)方式讀能達到30k/s.寫速度一般是讀速度的70%-90%.速度肯定能達到要求 對于高速單片機速度會更快.


好,我再調(diào)調(diào)電路。


為什么我怎么改,我的寫的速率才有100字節(jié)左右,我用avr單片機。我上面的程序能這樣寫嗎?我在中斷里面寫U盤,這樣可以嗎?


void xQueryInterrupt( void ) /* 查詢CH375中斷并更新中斷狀態(tài) */ { while ( CH375_INT_WIRE ); /* 如果CH375的中斷引腳輸出高電平則等待 */ xWriteCH375Cmd( CMD_GET_STATUS ); /* 獲取當前中斷狀態(tài),發(fā)出命令后至少延時2uS */ CH375IntStatus = xReadCH375Data( ); /* 獲取中斷狀態(tài) */ if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 檢測到USB設備斷開事件 */ else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 檢測到USB設備連接事件 */ } 經(jīng)常運行到這里就停住了是怎么回事???


strcpy( (char *)mCmdParam.Open.mPathName, "/AF.TXT" ); i =CH375FileOpen( ); if ( i == ERR_SUCCESS ) { mCmdParam.ByteLocate.mByteOffset = 0xffffffff; // 移到文件的尾部 i =CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { // mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/MY_ADC.TXT" ); strcpy( (char *)mCmdParam.Create.mPathName, "/AF.TXT" ); i = CH375FileCreate( ); // 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 mStopIfError( i ); }

怎么光這幾個函數(shù)就占去50ms的時間???


只有登錄才能回復,可以選擇微信賬號登錄

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