最新版 FatFS f_forward 详解
作者:fly 发布于:2014-3-24 16:36 分类:嵌入式
f_forward
读取文件数据并将其转发到数据流设备。
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;
}
日历
分类
存档
- 2018年3月(1)
- 2017年9月(1)
- 2017年7月(2)
- 2017年5月(1)
- 2017年3月(2)
- 2017年2月(6)
- 2017年1月(9)
- 2016年12月(13)
- 2016年11月(4)
- 2016年8月(17)
- 2016年7月(4)
- 2016年3月(1)
- 2016年2月(2)
- 2015年12月(4)
- 2015年10月(5)
- 2015年9月(1)
- 2015年8月(1)
- 2015年6月(2)
- 2015年5月(4)
- 2015年4月(1)
- 2015年3月(4)
- 2015年2月(2)
- 2015年1月(24)
- 2014年12月(3)
- 2014年10月(5)
- 2014年9月(5)
- 2014年8月(4)
- 2014年7月(13)
- 2014年6月(18)
- 2014年5月(20)
- 2014年4月(21)
- 2014年3月(89)
- 2014年2月(121)
- 2014年1月(11)
最新评论
- qq
哈 - AdOnCn
很好!感谢! - FlyLu
fly您好,看到你写的文章很不错,也很佩... - 地铁诡事
[给力] - 婚嫁百科
如果有爱,如果有结局! - 安安博客
看不懂 - wys.me
博主好,请教个问题哈。 怎么修改vis... - 知道91博客
哈哈,这个算是编程很基础很基础的了吧 - 婚嫁百科
晕死,怎么都不会显示出来的啊 - 小俊
看不懂
发表评论: