大家看我的程序有问题吗?

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( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */ 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; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ i = CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); h=0; }

我用的是字节读写模式,读来的16位的数据高八位给a,低八位给b,然后存入mCmdParam.ByteWrite.mByteBuffer中,如果满28字节则写盘,但是我读的数据不对,请看这程序对吗?

从u盘读出的数据和从串口读出的数据不一样啊。


按照你上面的程序,应该改成这样: mCmdParam.ByteWrite.mByteBuffer[h]='b'; mCmdParam.ByteWrite.mByteBuffer[h+1]='a'; 这样的话,在。TXT文件里面才可以显示出是b和a,不然的话显示出来的是乱码


我这里的b是ad转换的低八位数据,a是高八位数据,不能用'b','a'表示,否则显示出来是b和a 了。


我每次读取的ad数值是2字节,我想28字节写一次盘,请问我这函数该如何写,我上面写的函数写到盘里的数据和我串口观察的数据不一致啊。


随便你自己往U盘里面写什么数据,你可以找一个看U盘物理扇区的计算机端的软件,你看下你写下去的数据是什么数据不就可以了,按照你写的,b,c是什么形式的数据?你根本就没有进行说明,那我们只能按照你默认的形式写到文件里面去,你采集的数据一次2字节的话,那么,你可以在新建文件的时候将文件创建为HEX文件,然后把你采集到的数据以16进制的形式存放进去(前提是你采集的数据是16进制的)。就不需要什么数据转换了


我的a,b都是Uint8型,我现在的问题是感觉写一次盘要用很多时间,我的采样率是500hz,我发现写进U盘里的数据丢失了一部分。我把写盘放在了中断里面。中断里的程序就是上面的程序。


字节方式写盘速度是比较慢的.写进U盘里的数据丢失了一部分,是不是你在关闭文件前没有跟新文件长度


每次写完斗更新了。 在示波器上观察,我的采样率是500hz,那么drdy信号和dout信号的频率都应该为500hz,但是实际上drdy的频率为500hz,而dout信号只有50hz左右,即打开文件,读ad值,写盘,关闭文件花了大约2ms,感觉很慢啊,丢了好多数据啊。


drdy,dout分别表示什么信号,1k/s的速度能达到要求啊


drdy是数据准备好的意思,dout就是从ad转换的数据,也就是采样率为500hz的话,读ad一次为2个字节(16位ad),那么一秒种就1000字节,字节模式下速度有多快,扇区模式下有多快?


主要看是什么单片机,51单片机扇区方式读能达到200k/s左右,字节方式读能达到30k/s.写速度一般是读速度的70%-90%.速度肯定能达到要求 对于高速单片机速度会更快.


好,我再调调电路。


为什么我怎么改,我的写的速率才有100字节左右,我用avr单片机。我上面的程序能这样写吗?我在中断里面写U盘,这样可以吗?


void xQueryInterrupt( void ) /* 查询CH375中断并更新中断状态 */ { while ( CH375_INT_WIRE ); /* 如果CH375的中断引脚输出高电平则等待 */ xWriteCH375Cmd( CMD_GET_STATUS ); /* 获取当前中断状态,发出命令后至少延时2uS */ CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */ if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 检测到USB设备断开事件 */ else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 检测到USB设备连接事件 */ } 经常运行到这里就停住了是怎么回事啊?


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( ); // 新建文件并打开,如果文件已经存在则先删除后再新建 mStopIfError( i ); }

怎么光这几个函数就占去50ms的时间啊?


只有登录才能回复,可以选择微信账号登录