📄 main.c
字号:
com_send_arry(&fat_file_buffer,512,1); /*显示文件的扇区数据*/
com_prints("fat_cmd.read.sector: ",0); /*实际读取扇区数*/
com_send_arry(&fat_cmd.read.sector,1,1);
fat_fclose(); /*关闭文件*/
/*===================================================================*/
p_next8:
/*===================================================================*/
/*以下演示字节方式读文件*/
#if F_EN_BYTE ==1
com_prints("open file:\\测试1.TXT",1);
mem_copy(fat_cmd.open.buffer,"\\测试1.TXT");
i=fat_fopen( );
if(i!=F_OK)
{
show_error_code(i);
goto p_next7;
}
com_prints("fat_file_length:",0);
com_send_arry(&fat_file_length,4,1);
com_prints("offset byte...",1);
fat_cmd.blocate.byte32 =510; /*偏移字节数*/
i=fat_locate_byte(); /*偏移字节在文件*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next7;
}
com_prints("byte read...",1);
while(1)
{
fat_cmd.bread.count =FAT_CMD_BUF_LEN-1; /*写入要读取的字节数*/
fat_byte_read();
com_prints("mByteCount: ",0);
com_send_arry(&fat_cmd.bread.count,1,1); /*实际读入字节*/
com_send_arry(&fat_cmd.bread.buffer[0],fat_cmd.bread.count,1);
if(fat_cmd.bread.count <(FAT_CMD_BUF_LEN-1)) /*小于写入长度,文件读完*/
{
break;
}
}
fat_fclose(); /*关闭文件*/
p_next7:
/*===================================================================*/
/*以下演示字节方式写文件,超过原文件长度需要手动更新文件长度*/
com_prints("open file:\\测试2.TXT",1);
mem_copy(fat_cmd.open.buffer,"\\测试2.TXT");
i=fat_fopen( ); /*打开文件偏移指向文件开始*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next6;
}
com_prints("offset byte...",1);
fat_cmd.blocate.byte32 =0XFFFFFFFF; /*偏移到文件末尾*/
i=fat_locate_byte();
if(i!=F_OK)
{
show_error_code(i);
goto p_next6;
}
com_prints("byte write...",1);
temp32 =30;
for(i =0;i !=FAT_CMD_BUF_LEN-1;i++)
fat_cmd.bwrite.buffer[i]=0x55; /*初始化字节缓冲区*/
while(1)
{
if(temp32 > (FAT_CMD_BUF_LEN-1)) /*文件长度大于缓冲区的长度*/
{
fat_cmd.bwrite.count=FAT_CMD_BUF_LEN-1;
temp32 -=fat_cmd.bwrite.count; /*剩余扇区数*/
}
else
{
fat_cmd.bwrite.count =(UINT8)temp32;
temp32=0;
}
com_prints("temp32: ",0);
com_send_arry(&temp32,4,1);
i=fat_byte_write();
if(i!=F_OK)
{
show_error_code(i);
goto p_next6;
}
if(temp32 ==0)
break;
}
com_prints("modify file attribute...",1);
fat_cmd.modify.size =fat_file_length + 30;
fat_cmd.modify.date =0XFFFF;
fat_cmd.modify.time =0XFFFF;
fat_cmd.modify.attr =0XFF;
i=fat_fmodify(); /*修改文件长度(赋予确定的文件长度)*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next6;
}
fat_fclose(); /*关闭文件*/
p_next6:
/*===================================================================*/
/*===================================================================
3.顺序改写文件(覆盖原文件数据)
(1) fat_fopen,打开文件
(2) 多次fat_fwrite 或fat_byte_write,写入数据
(3) 关闭文件
===================================================================*/
com_prints("open file:\\CCC.TXT",1);
mem_copy(fat_cmd.open.buffer,"\\CCC.TXT");
i=fat_fopen( );
if(i!=F_OK)
{
show_error_code(i);
goto p_next5;
}
com_prints("fat_file_length:",0);
com_send_arry(&fat_file_length,4,1);
fat_cmd.write.sector=(fat_file_length+511)/512; /*计算文件占用扇区数*/
while(fat_cmd.write.sector)
{
ini_file_buf(); /*处理文件缓冲区*/
i=fat_fwrite(); /*写数据到此文件*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next5;
}
com_prints("write sector: ",0);
com_send_arry(&fat_cmd.write.sector,2,1);
}
fat_fclose(); /*关闭文件*/
/*===================================================================*/
p_next5:
/*===================================================================
8.创建最后一级目录
(1).fat_create_dir,创建目录
===================================================================*/
com_prints("create dir:\\DDD",1);
mem_copy(fat_cmd.create.buffer,"\\DDD");
i =fat_create_dir();
if(i!=F_OK)
show_error_code(i);
/*===================================================================
6.新建文件
(1) fat_fcreate,新建文件(F_CREATE_NEW和F_CREATE_ALWAYS)
(2) 多次fat_fwrite 或 fat_byte_write,写入数据
(3) fat_fmodify修改文件属性,改写文件长度(文件长度由此改写)
(4) fat_fclose关闭文件,在写文件过程中FAT表已经更新
===================================================================*/
com_prints("create file:\\测试4.TXT",1);
mem_copy(fat_cmd.create.buffer,"\\测试4.TXT");
i=fat_fcreate(F_CREATE_ALWAYS); /*以此方式创建文件,如此文件存在则删除*/
if(i!=F_OK)
show_error_code(i);
else /*创建文件成功向文件写入数据*/
{
com_prints("create file ok!",1);
com_prints("write data to file...",1); /*在这因写入扇区数据较少,所以申请了一个扇区*/
fat_cmd.write.sector =1; /*申请写入扇区数,更新FAT时按此更新*/
ini_file_buf(); /*处理文件缓冲区*/
com_prints("Write.mSectorCount: ",0);
com_send_arry(&fat_cmd.write.sector,2,1);
i=fat_fwrite(); /*写数据到此文件(每次把缓冲区的数据全部写入磁盘)*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next1;
}
com_prints("write data ok!",1);
com_prints("modify file attribute...",1);
fat_cmd.modify.size =512; /*修改文件长度(赋予确定的文件长度)*/
fat_cmd.modify.date =MDATE(2007,2,5); /*修改文件创建日期*/
fat_cmd.modify.time =MTIME(8,36,20); /*修改文件创建时间*/
fat_cmd.modify.attr =ATTR_ARCHIVE; /*修改文件属性*/
i=fat_fmodify();
if(i!=F_OK)
{
show_error_code(i);
goto p_next1;
}
com_prints("modify file ok!",1);
com_prints("close file",1);
fat_fclose(); /*关闭文件*/
}
/*===================================================================*/
p_next1:
#endif
/*===================================================================
5.向已有的文件添加数据
(1).fat_fopen,打开文件
(2).fat_locate_sector移动文件指针到末尾,0xFFFFFFFF
(3).多次fat_fwrite或fat_byte_write写入数据
(4).fat_fmodify修改文件属性,改写文件长度
(5).fat_fclose关闭文件
===================================================================*/
com_prints("open file:测试5.TXT",1);
mem_copy(fat_cmd.open.buffer,"\\测试5.TXT");
i=fat_fopen( );
if(i!=F_OK)
{
show_error_code(i);
goto p_next4;
}
com_prints("offset sector...",1); /*文件剩余扇区将会不计*/
fat_cmd.locate.sector =0XFFFFFFFF; /*0回到文件开始 如偏移"1"到到第2个扇区*/
i =fat_locate_sector(); /*跳过开始的两个扇区*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next4;
}
fat_cmd.write.sector =2048; /*添加扇区数*/
while(fat_cmd.write.sector)
{
com_prints("Write.mSectorCount: ",0);
com_send_arry(&fat_cmd.write.sector,2,1);
ini_file_buf(); /*处理文件缓冲区*/
i=fat_fwrite(); /*写数据到此文件(每次把缓冲区的数据全部写入磁盘)*/
if(i!=F_OK)
{
show_error_code(i);
goto p_next4;
}
}
com_prints("modify file attribute...",1);
fat_cmd.modify.size =fat_file_length + 1048576; /*修改文件长度(赋予确定的文件长度)*/
fat_cmd.modify.date =MDATE(2007,2,5); /*修改文件创建日期*/
fat_cmd.modify.time =MTIME(8,36,20); /*修改文件创建时间*/
fat_cmd.modify.attr =ATTR_ARCHIVE; /*修改文件属性*/
i=fat_fmodify();
if(i!=F_OK)
{
show_error_code(i);
goto p_next4;
}
fat_fclose(); /*关闭文件*/
get_a_byte( 0 );
p_next4:
/*===================================================================
7.删除文件
(1).fat_fdelete,删除文件(不支持删除文件夹)
===================================================================*/
com_prints("delete file:\\AAA\\BBB\\DDD.TXT",1); /*删除文件*/
mem_copy(fat_cmd.del.buffer,"\\AAA\\BBB\\DDD.TXT");
i =fat_fdelete();
if(i!=F_OK)
show_error_code(i);
p_end:
com_prints("take out...",1);
while(1)
{
if(USB_INT_DISCONNECT==mWaitInterrupt())
goto p_start;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -