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

📄 fat.c

📁 this is a source code for usinf sd card with PIC this one is xith fat support
💻 C
字号:

#include <built_in.h>
#include "mmc.h"//<mmc.h>
#include "rom.h"//<rom.h>

//*************** MACROS ***************//

/* R閏up鑢e l'閠at d'un cluster. */

#define fat_cluster_is_free(F) (((F) & 0x0FFFFFFF) == 0x00000000)
#define fat_cluster_is_bad(F) (((F) & 0x0FFFFFFF) == 0x0FFFFFF7)
#define fat_cluster_is_last(F) ((F) >= 0x0FFFFFF8)

#define fat_cluster_is_next(F) \
\
    (!fat_cluster_is_free(F) && \
    !fat_cluster_is_bad(F) && \
    !fat_cluster_is_last(F))

#define fat_cluster_is_not_next(F) \
\
    (fat_cluster_is_free(F) || \
    fat_cluster_is_bad(F) || \
    fat_cluster_is_last(F))

//*************** VARIABLES GLOBALES ***************//

typedef struct { /* Fichier. */

    unsigned long entry_block; /* Bloc de l'entr閑 du fichier. */
    unsigned int entry_byte; /* Octet de l'entr閑 du fichier dans son bloc. */
    unsigned long first_cluster; /* Num閞o du premier cluster du fichier. */
    unsigned long size; /* Taille du fichier. */

} fat_file;

/* Sauvegardes des derni鑢es op閞ations. */

unsigned long fat_last_block = 0xFFFFFFFF;
unsigned long fat_last_cluster;
unsigned short fat_last_cluster_block;

fat_file *fat_last_read_block_file = 0x00;
unsigned long fat_last_read_block_nb_cluster = 0xFFFFFFFF;

unsigned long fat_last_read_line_offset = 0;

//*************** FONCTIONS "PRIVEES" ***************//

/* Num閞o de bloc de l'entr閑 d'un cluster dans la FAT. */
unsigned long fat_cluster_to_entry_block(unsigned long cluster) {

    return cluster / (MMC_BLOCK_LENGTH / 4) + 38;
}

/* Num閞o du premier bloc d'un cluster. */
unsigned long fat_cluster_to_block(unsigned long cluster) {

    return 8 * (cluster - 2) + 3960;
}

/* Octet de l'entr閑 d'un cluster dans la FAT. */
unsigned long fat_cluster_to_fat_byte(unsigned long cluster) {

    return 4 * (cluster % (MMC_BLOCK_LENGTH / 4));
}

/* Sauve le bloc en cours sur la carte. */
unsigned short fat_save_block() {

    unsigned int i;

    /* Ouverture d'un bloc en 閏riture. */
    
    mmc_open_write_block_inline(fat_last_block);

    /* Ecriture des donn閑s. */
    
    for( i = 0; i < MMC_BLOCK_LENGTH; ++i)
        mmc_write(flash_read(rom_address + i));

    /* V閞ification d'閏riture et fermeture du bloc. */
    
    mmc_write_verif_inline();
    mmc_close_block_inline();

    return 0;
}

/* Charge un bloc dans le tampon. */
unsigned short fat_load_block(unsigned long block) {

    unsigned int i;

    /* Si le bloc n'a pas d閖

⌨️ 快捷键说明

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