CH375ByteWrite( ); 这个函数应用一次得花多长时间啊?
经过修改,现将程序贴出,看这样能实现吗?
SIGNAL(SIG_INTERRUPT2) {WriteToReg_ADC(0X38); pstr=Read_ADC16BitValue(); usart_transmit(pstr); b=pstr&0x0FF; usart_transmit(b); a=pstr>>8; usart_transmit(a); data[h]=a; data[h+1]=b; h+=2; } int main(void) { UINT8 i; CH375_PORT_INIT( );//ch375端口初始化 mDelaymS( 100 ); // 延时100毫秒 i = CH375LibInit( ); // 初始化CH375程序库和CH375芯片,操作成功返回0 mStopIfError( i ); //delay50us(100); //延时等待外围器件稳定 spi_init(); //spi初始化 ADC_Init(); //ad7705初始化 Usart_init(); //串口初始化 //while(1) while ( CH375DiskStatus < DISK_CONNECT ) { // 查询CH375中断并更新中断状态,等待U盘插入 if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; // 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus mDelaymS( 100 ); } mDelaymS( 200 ); // 延时,可选操作 for ( i = 0; i < 10; i ++ ) { // 有的U盘总是返回未准备好,不过可以被忽略 mDelaymS( 100 ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; // 查询磁盘是否准备好 } //UINT8 i; //mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/MY_ADC.TXT" ); strcpy( (char *)mCmdParam.Open.mPathName, "/FFFF.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, "/FFFF.TXT" ); i = CH375FileCreate( ); // 新建文件并打开,如果文件已经存在则先删除后再新建 mStopIfError( i ); }
MCUCSR&=~(1< GIFR=(1< GICR=(1< sei(); //总中断允许 while(1) { if(h==28) { mCmdParam.ByteWrite.mByteBuffer[28]=data[28]; h=0; mCmdParam.ByteWrite.mByteCount = 28; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); mCmdParam.ByteWrite.mByteCount = 0; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); } } return 1; }
其中h为全局变量,怎样一次将28字节的数据赋值给mCmdParam.ByteWrite.mByteBuffer[],这是个什么样的函数啊?
mCmdParam.ByteWrite.mByteBuffer[]这个是在头文件中定义的一个结构体.你将28字节的数都赋给这个缓冲区, 例如: for(h=0;h!=28;h++) { mCmdParam.ByteWrite.mByteBuffer [ h ] =a; mCmdParam.ByteWrite.mByteBuffer [ h+1 ] =b; } 再将mCmdParam.ByteWrite.mByteCount=28.
大家看看我的程序,我上面的程序好像不执行写盘操作啊,我想问一下执行一次CH375ByteWrite( ); 要花多长时间啊?
上面的程序你只写了一个字节到缓冲区啊.按下面改下试试. while(1) { for(h=0;h!=28;h++) { mCmdParam.ByteWrite.mByteBuffer[h]=data[h]; } mCmdParam.ByteWrite.mByteCount = 28; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ if(h==28) h=0; CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); mCmdParam.ByteWrite.mByteCount = 0; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); } } return 1;
还有你是中断一次向mCmdParam.ByteWrite.mByteBuffer 缓冲区赋一个字节数,等赋满28字节,一次写进去.这样不好知道是哪里花的时间长.使速度慢了.你可以先直接赋值,不使用中断看下执行一次CH375ByteWrite( ),时间多少.