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

📄 main.c

📁 文件系统,运行硬件环境:单片机,软件环境:keilc
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -