拿CH376DEMO板写的程序,按照EXAM7程序测试U盘写文件,前面都正确,就是后面ADC字符后面乱码,请问哪里有写错误? 2次写的字符: 此前文件长度= 0 字节 08.1280.5632 ADC=1214 09.1280.7204 ADC=36030 10.1280.4683 ADC=31678 11.1280.4983 ADC=61374 12.1280.7328 ADC=8382 13.1280.3526 ADC=56254 14.1280.499 ADC=30654 15.1280.5401 ADC=16574 16.1280.7745 ADC=14526 17.1280.5993 ADC=12478 18.1280.5778 ADC=21182 19.1280.4538 ADC=22462 今天的ADC示莸酱私崾? 此前文件长度= 329 字节 08.05.14 ADC=4 09.05.14 ADC=4074 10.05.15 ADC=10210 11.05.15 ADC=16701 12.05.11 ADC=23973 13.05.24 ADC=31300 14.05.26 ADC=38884 15.05.13 ADC=46212 16.05.00 ADC=53217 17.05.21 ADC=60270 18.05.14 ADC=2062 19.05.18 ADC=9070 今天的ADC示莸酱私崾? “示莸酱私崾?”就是乱码。
代码如下: /********************************* Pressexport函数 功能: Pressexport 调用后,进入Pressexport **********************************/ void Pressexport(void) { uchar s ; EA = 0 ; s = mInitCH376Host( ); /* 初始化CH376 */ // CH376_SD_Mode( ); //将CH376设置成SD卡模式 CH376_UDisk_Mode(); //usb mode for ( s = 0; s < 10; s ++ ) { // 最长等待时间,10*50mS delay_ms( 50 ); if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; //初始化磁盘并测试磁盘是否就绪 */ } s = CH376FileOpen( "/MY_ADC.TXT" ); /* 打开文件,该文件在根目录下 */ if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */ // printf( "File size = %ld\n", CH376GetFileSize( ) ); /* 读取当前文件长度 */ // printf( "Locate tail\n" ); s = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ mStopIfError( s ); } else if ( s == ERR_MISS_FILE ) { /* 没有找到文件,必须新建文件 */ // printf( "Create\n" ); s = CH376FileCreate( NULL ); /* 新建文件并打开,如果文件已经存在则先删除后再新建,不必再提供文件名,刚才已经提供给CH376FileOpen */ mStopIfError( s ); } else mStopIfError( s ); /* 打开文件时出错 */ // printf( "Write begin\n" ); s = sprintf( buf, "此前文件长度= %ld 字节\xd\xa", CH376GetFileSize( ) ); /* 注意字符串长度不能溢出buf,否则加大缓冲区或者分多次写入 */ s = CH376ByteWrite( buf, s, NULL ); /* 以字节为单位向文件写入数据 */ mStopIfError( s ); // printf( "Write ADC data\n" ); TR0=1; /* 用定时器0的计数值代替ADC数据 */ for ( data1 = 8; data1 != 20; data1 ++ ) { /* 用循环方式添加12行数据 */ data2 = 5; /* 假定是5月 */ data3 = TL1 & 0x1F; /* 因为测试板上没有实时时钟芯片,所以用定时器1的计数代替进行演示 */ /* adc = get_adc_data( ); */ adc = ( (UINT16)TH0 << 8 ) | TL0; /* 因为测试板上没有ADC,所以用定时器0的计数代替ADC数据演示 */ s = sprintf( buf, "%02d.%02d.%02d ADC=%u\xd\xa", (UINT16)data1, (UINT16)data2, (UINT16)data3, adc ); /* 将二制制数据格式为一行字符串 */ s = CH376ByteWrite( buf, s, NULL ); /* 以字节为单位向文件写入数据 */ /* 有些U盘可能会要求在写数据后等待一会才能继续操作,所以,如果在某些U盘中发生数据丢失现象,建议在每次写入数据后稍作延时再继续 */ mStopIfError( s ); // printf( "Current offset ( file point ) is %ld\n", CH376ReadVar32( VAR_CURRENT_OFFSET ) ); /* 读取当前文件指针 */ } CH376ByteWrite( buf, 0, NULL ); /* 以字节为单位向文件写入数据,因为是0字节写入,所以只用于更新文件的长度,当阶段性写入数据后,可以用这种办法更新文件长度 */ // printf( "Write end\n" ); strcpy( buf, "今天的ADC数据到此结束\xd\xa" ); s = CH376ByteWrite( buf, strlen( buf ), NULL ); /* 以字节为单位向文件写入数据 */ mStopIfError( s ); /* 如果实际产品中有实时时钟,可以根据需要将文件的日期和时间修改为实际值,参考EXAM10用CH376DirInfoRead/CH376DirInfoSave实现 */ // printf( "Close\n" ); s = CH376FileClose( TRUE ); /* 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ mStopIfError( s );
// printf( "Take out\n" ); while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ delay_ms( 100 ); } delay_ms( 200 ); while(1) { } }