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

📄 _fs_read.c

📁 keil arm flash fs 最新版 在Keil arm下使用
💻 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 + -