FatFs文件系统:f_forward

网站作者1年前FatFs652

读取文件数据并将其转发到数据流设备。

FRESULT f_forward (   
    FIL* FileObject, /* 文件对象 */   
    UINT (*Func)(const BYTE*,UINT), /* 数据流函数 */   
    UINT ByteToFwd, /* 要转发的字节数 */   
    UINT* ByteFwd /* 已转发的字节数 */  
);


参数:

FileObject 打开的文件对象的指针。 

Func 用户定义的数据流函数的指针。详情参考示例代码。 

ByteToFwd 要转发的字节数,UINT 范围内。 

ByteFwd 返回已转发的字节数的 UINT 变量的指针。 


返回值:

FR_OK (0)函数成功。 

FR_DENIED 由于文件已经以非读模式打开,而导致函数失败。 

FR_DISK_ERR 由于底层磁盘 I/O 函数中的错误,而导致该函数失败。 

FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。 

FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 

FR_INVALID_OBJECT 文件对象无效。 


描述:

f_forward 函数当_USE_FORWARD == 1 并且_FS_TINY == 1 时可用。 

f_forward 函数从文件中读取数据并将数据转发到输出流,而不使用数据缓冲区。这适用于小存储系统, 因为它在应用模块中不需要任何数据缓冲区。文件对象的文件指针以转发的字节数增加。如果*ByteFwd <  ByteToFwd 并且没有错误,则意味着由于文件结束或在数据传输过程中流忙,请求的字节不能被传输。 


示例(音频播放):

*-----------------------------------------------------------------------*/  
/* 示例代码:数据传输函数,将被 f_forward 函数调用 */  
/*-----------------------------------------------------------------------*/  
UINT out_stream ( /* 返回已发送字节数或流状态 */   
    const BYTE *p, /* 将被发送的数据块的指针 */   
    UINT btf /* >0: 传输调用(将被发送的字节数)。0: 检测调用 */  
)  
{   
    UINT cnt = 0;   
    if (btf == 0) 
    { /* 检测调用 */   
        /* 返回流状态(0: 忙,1: 就绪) */   
        /* 当检测调用时,一旦它返回就绪,那么在后续的传输调用时,它必须接收至少一个字节,或者 f_forward 将以 FR_INT_ERROR 而失败。 */  
        if (FIFO_READY) cnt = 1;   
    }   
    else 
    { /* 传输调用 */   
        do 
        { /* 当有数据要发送并且流就绪时重复 */
            FIFO_PORT = *p++;  
            cnt++;   
        } 
        while (cnt < btf && FIFO_READY);   
     }  
       return cnt;  
}  
/*-----------------------------------------------------------------------*/  
/* 示例代码:使用 f_forward 函数 */  
/*-----------------------------------------------------------------------*/  
FRESULT play_file (   
    char *fn /* 待播放的音频文件名的指针 */  
)  
{   
    FRESULT rc;   
    FIL fil;   
    UINT dmy;   /* 以只读模式打开音频文件 */  
    rc = f_open(&fil, fn, FA_READ);   
    /* 重复,直到文件指针到达文件结束位置 */  
    while (rc == FR_OK && fil.fptr < fil.fsize) 
    {   /* 任何其他处理... */   
        /* 定期或请求式填充输出流 */  
        rc = f_forward(&fil, out_stream, 1000, &dmy);   
    }   
    /* 该只读的音频文件对象不需要关闭就可以被丢弃 */  
    return rc; 
}


相关文章

FatFs文件系统:f_readdir

读取目录项。FRESULT f_readdir (      DIR* DirObject, /* 指向打开的目录对象结构的指针 */      FILINFO* FileInfo /* 指向文件...

FatFs文件系统:f_rename

重命名一个对象。FRESULT f_rename (        const XCHAR* OldName, /* 原对象名的指针 */        const XCHAR* NewName ...

FatFs文件系统:f_close

关闭一个打开的文件。FRESULT f_close (      FIL* FileObject /* 文件对象结构的指针 */ );参数:FileObject 指向将被关闭的已打开的文件对象结构...

FatFs文件系统:f_truncate

截断文件大小FRESULT f_truncate (      FIL* FileObject /* 文件对象结构指针 */ );参数:FileObject 待截断的打开的文件对象的指针。返回值:...

FatFs文件系统:f_putc

f_putc 函数向文件中写入一个字符。int f_putc (        int Chr, /* 字符 */        FIL* FileObject /* 文件对象 */   );参...

FatFs文件系统:f_write

写入数据到一个文件。FRESULT f_write (      FIL* FileObject, /* 文件对象结构的指针 */      const void* Buffer, /* 存储写入...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。