我在调用 CH375FileOpen( ) 搜索文件时,返回错误代码 0x1F,如果此时不把 U 盘拔出,直接复位系统( 复位单片机 ),再运行程序时,程序会跑飞. 我的主函数的大体过程如下: PORT_INIT( ); //引脚复位 TEST_CH375_PORT( ); //测试 CH375 是否正常工作 CH375LibInit( ); // 初始化 CH375 CH375DiskConnect( ); //查询CH375中断,等待U盘插入 CH375DiskReady( ); // 查询磁盘是否准备好 CH375DiskSize( ); //查询 U 盘容量 CH375FileOpen( ); //文件名中含有通配符*,搜索文件 请问出现此问题的原因可能是什么?为什么不拔 U 盘复位系统后再运行程序会跑飞?
(1)跟磁盘缓冲区有关 (2)直接系统复位,可能是由于RAM没有掉电,保存了一些标志或变量,影响了程序的运行
请问出现以下问题是何原因: (1)有的 U 盘插上之后,运行至 CH375DiskReady( ) 时,卡在头文件 CH375HFQ.H 中 xQueryInterrupt( ) 的 while ( CH375_INT_WIRE ) 命令行. (2)有的 U 盘,运行 CH375FileOpen( ) 搜索文件时,返回 0x43(此时 CH375IntStatus = 0x14,CH375DiskStatus = 0x13),但是运行到 CH375FileCreate( ) 时,程序跑飞或者返回 0x82,而且使用 CH375FileOpen( ) 搜索文件时,只能搜索根目录下的子目录文件夹,如果搜索具体文件,程序就跑飞或者返回 0x82. 主函数中,具体应用如下: pCodeStr = "\\*"; for ( c = 0; c < 10; c ++ ) { // 最多搜索前20个文件 i = mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, pCodeStr ); // 搜索文件名,*为通配符 mCmdParam.Open.mPathName[ i ] = c; // 根据字符串长度将结束符替换为搜索的序号 q = CH375FileOpen( ); //打开文件,如果文件名中含有通配符*,则为搜索文件而不打开 if ( i == ERR_FOUND_NAME ) { //搜索到与通配符相匹配的文件名,文件名及其完整路径在命令缓冲区中 for(j=0;j<11;j++) { Filename[j]=mCmdParam.Open.mPathName[j]; //save the name of the file which is found at last. } continue; //继续搜索下一个匹配的文件名,下次搜索时序号会加1 } else if ( i == ERR_MISS_FILE ) break; //再也搜索不到匹配的文件,已经没有匹配的文件名 else { //出错 mStopIfError( q ); break; } } // 产生新文件 #ifdef EN_DISK_WRITE mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "\\NEWFILE.TXT" ); // 新文件名,在根目录下,中文文件名 r = CH375FileCreate( ); // 新建文件并打开,如果文件已经存在则先删除后再新建 mStopIfError( r ); pCodeStr = "找不到/C51/CH375HFT.C文件\xd\n"; for ( i = 0; i != 255; i ++ ) { if ( ( FILE_DATA_BUF[i] = *pCodeStr ) == 0 ) break; pCodeStr++; } NewSize = i; // 新文件的长度 SecCount = 1; // (NewSize+511)/512, 计算文件的扇区数,因为读写是以扇区为单位的 mCmdParam.Write.mSectorCount = SecCount; // 写入所有扇区的数据 s = CH375FileWrite( ); // 向文件写入数据 mStopIfError( s ); #endif