📄 temp.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 + -