📄 _fs_read.c
字号:
/*----------------------------------------------------------------------------
* R T L - F l a s h F i l e S y s t e m
*----------------------------------------------------------------------------
* Name: _FS_READ.C
* Purpose: Low level File Read Block Function
* Rev.: V3.22
*----------------------------------------------------------------------------
* This code is part of the RealView Run-Time Library.
* Copyright (c) 2004-2008 KEIL - An ARM Company. All rights reserved.
*---------------------------------------------------------------------------*/
#include "File_Config.h"
/*--------------------------- __read ----------------------------------------*/
int __read (int handle, U8 *buf, U32 len) {
/* Low level file read function */
U32 size,rlen,nr;
IOB *fcb;
if (buf == NULL) {
/* Invalid buffer, return error. */
return (-1);
}
fcb = &_iob[handle];
if (fcb->drive == DRV_MCARD) {
/* Read data from Flash Memory Card. */
rlen = fat_read (fcb, buf, len);
/* Return number of bytes NOT read. */
if (rlen == 0) {
/* No data read, must be End of File. */
/* Note: Early End of File does not work for fseek(). */
return (0x80000000 | len);
}
/* Return number of bytes NOT read. */
return (len - rlen);
}
for (nr = 0; nr < len; ) {
if (fcb->_ftop == fcb->_fbot) {
if (fs_mark_fileMem (fcb) == __FALSE) {
/* Invalid File or End Of File found */
if (nr == 0) {
/* Early End of File does not work for fseek(). */
return (0x80000000 | len);
}
return (len - nr);
}
}
rlen = len - nr;
size = fcb->_ftop - fcb->_fbot;
if (size < rlen) {
rlen = size;
}
fs_ReadBlock (((DEVCONF *)fcb->DevCfg)[fcb->_fblock].bStart + fcb->_fbot,
&buf[nr], rlen, fcb);
fcb->_fbot += rlen;
nr += rlen;
}
/* Return number of bytes NOT read. */
return (0);
}
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -