⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp.c

📁 AVR单片机制作U盘的源码
💻 C
字号:
        /*
		strcpy( mCmdParam.Open.mPathName, "\\C51\\CH375HFT.C" );  /* 文件名,该文件在C51子目录下 */
		i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN );  /* 打开文件,输入参数置为最大值,省得再计算参数长度 */
		TempLength = 0;
		if ( i == ERR_MISS_DIR || i == ERR_MISS_FILE ) {  /* ERR_MISS_DIR说明没有找到C51子目录,ERR_MISS_FILE说明没有找到文件 */
		}
		else {  /* 找到文件\C51\CH375HFT.C或者出错 */
			mStopIfError( i );
			mCmdParam.ByteRead.mByteCount = 6;  /* 请求读出6字节数据, 单次读写的长度不能超过 sizeof( mCmdParam.ByteWrite.mByteBuffer ) */
			i = ExecCommand( CMD_ByteRead, 1 );  /* 以字节为单位读取数据 */
			mStopIfError( i );
			for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%C", mCmdParam.ByteRead.mByteBuffer[i] );
			printf( "]\n" );
			if ( mCmdParam.ByteRead.mByteCount<6 ) printf( "已经到文件的末尾\n" );
			if ( mCmdParam.ByteRead.mByteCount==6 ) {  /* 未到文件末尾 */
				mCmdParam.ByteRead.mByteCount = 20;  /* 请求再读出20字节数据, 单次读写的长度不能超过 sizeof( mCmdParam.ByteWrite.mByteBuffer ) */
				i = ExecCommand( CMD_ByteRead, 1 );  /* 以字节为单位读取数据,接着刚才的向后读 */
				mStopIfError( i );
				TempLength = mCmdParam.ByteRead.mByteCount;  /* 第二次读出字节数 */
				memcpy( TempBuffer, mCmdParam.ByteRead.mByteBuffer, TempLength );  /* 暂存第二次读出的数据以便写入新文件中 */
				printf( "从文件中读出的第6个字符开始依次是[" );
				for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%C", mCmdParam.ByteRead.mByteBuffer[i] );
				printf( "]\n" );
				if ( mCmdParam.ByteRead.mByteCount<20 ) printf( "已经到文件的末尾\n" );
			}
			printf( "Close\n" );
			mCmdParam.Close.mUpdateLen = 0;
			i = ExecCommand( CMD_FileClose, 1 );  /* 关闭文件 */
			mStopIfError( i );
		}
/* 产生新文件 */
		printf( "Create\n" );
/*		strcpy( mCmdParam.Create.mPathName, "\\NEWFILE.TXT" );*/
		strcpy( mCmdParam.Create.mPathName, "\\双击我吧.TXT" );  /* 新文件名,在根目录下 */
		i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN );  /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
		mStopIfError( i );
		printf( "ByteLocate\n" );
//		mCmdParam.ByteLocate.mByteOffset = 0;  /* 移动到文件头,用于重新回到文件头,以便写入数据覆盖原数据 */
//		ExecCommand( CMD_ByteLocate, 4 );  /* 以字节为单位移动文件指针 */
//		mCmdParam.ByteLocate.mByteOffset = 0xFFFFFFFF;  /* 移动到文件尾,用于在CMD_FileOpen打开文件后,继续追加数据到已打开文件的末尾 */
//		ExecCommand( CMD_ByteLocate, 4 );  /* 以字节为单位移动文件指针 */
		printf( "Write\n" );
		pStr = "Note: \xd\xa这个程序是以字节为单位进行U盘文件读写,单片机只需要有几十字节的RAM,不需要外部RAM,\xd\xa首先从/C51/CH375HFT.C文件中读出前20个字符,然后写到本说明的下一行\xd\xa";
		count = strlen( pStr );  /* 准备写入的数据的总长度 */
		while ( count ) {  /* 如果较大,分多次写入 */
			if ( count < sizeof( mCmdParam.ByteWrite.mByteBuffer ) ) i = count;  /* 只剩最后一些数据要写入 */
			else i = sizeof( mCmdParam.ByteWrite.mByteBuffer );  /* 数据较多,分多次写入 */
			count -= i;  /* 计数 */
			memcpy( mCmdParam.ByteWrite.mByteBuffer, pStr, i );  /* 复制准备写入的数据到参数结构中,源数据可以来自ADC等,本例是来自程序空间的说明信息 */
			pStr += i;
			mCmdParam.ByteWrite.mByteCount = i;  /* 指定本次写入的字节数 */
			i = ExecCommand( CMD_ByteWrite, 1+i );  /* 以字节为单位向文件写入数据 */
			mStopIfError( i );
		}
//		mCmdParam.ByteWrite.mByteCount = 0;  /* 指定写入0字节,用于刷新文件的长度,注意如果字节数不为0那么CMD_ByteWrite只负责写入数据而不修改文件长度 */
//		ExecCommand( CMD_ByteWrite, 1 );  /* 以字节为单位向文件写入数据,因为是0字节写入,所以只用于更新文件的长度,当阶段性写入数据后,可以用这种办法更新文件长度 */
		memcpy( mCmdParam.ByteWrite.mByteBuffer, TempBuffer, TempLength );
		mCmdParam.ByteWrite.mByteCount = TempLength;  /* 将原文件中的20个字节的数据添加到新文件的末尾 */
		i = ExecCommand( CMD_ByteWrite, 1+TempLength );  /* 以字节为单位向文件写入数据 */
		mStopIfError( i );
		printf( "Close\n" );
		mCmdParam.Close.mUpdateLen = 1;  /* 自动计算文件长度,当以字节为单位向文件写入数据后,如果没有用0长度的CMD_ByteWrite更新文件长度,那么可以在关闭文件时让模块自动更新文件长度 */
		i = ExecCommand( CMD_FileClose, 1 );  /* 关闭文件,当以字节为单位向文件写入(追加)数据后,必须在用完文件后关闭文件 */
		mStopIfError( i );

/* 等待U盘断开 */
		printf( "Take_out\n" );
		while ( 1 ) {  /* 使用查询方式看U盘是否断开 */
			i = ExecCommand( CMD_QueryStatus, 0 );  /* 查询当前模块的状态 */
			mStopIfError( i );
			if ( mCmdParam.Status.mDiskStatus <= DISK_DISCONNECT ) break;  /* U盘已经断开 */
			mDelaymS( 100 );  /* 没有必要一直连续不停地查询,可以让单片机做其它事,没事可做就延时等待一会再查询 */
		}
		LED_OUT = 1;  /* LED灭 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -