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

📄 fs_fanalyse.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_FANALYSE.C 
 *      Purpose: File System Analyse 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"

/*--------------------------- fanalyse --------------------------------------*/

int fanalyse (const char *drive) {
   /* Analyse the FlashFS and check for file defragmentation. */
   DEVCONF *pd;
   FALLOC fa;
   IOB *fcb;
   int handle;
   U32 total,inval;
   U32 i,adr,prev;

   /* Find an unused _iob structure. */
   if ((handle = fs_find_iob ()) == EOF) {
      return (1);
   }
   fcb = &_iob[handle];
   /* Get the drive index. */
   fcb->drive = fs_get_drive (drive);
   if (fcb->drive == DRV_NONE && *drive == 0) {
      /* Empty string provided for a drive name. */
      fcb->drive = _DEF_DRIVE;
   }
   if (fcb->drive == DRV_MCARD) {
      /* Memory Card currently not supported. */
      return (0);
   }
   /* Set drive parameters. */
   if (fs_set_params (fcb) == __FALSE) {
      return (0);
   }

   /* Calculate the total size of flash device. */
   total = 0;
   pd = (DEVCONF *)fcb->DevCfg;
   for (i = 0; i < fcb->NumSect; i++, pd++) {
      total += (pd->bEnd - pd->bStart);
   }

   /* Calculate the total size of invalidated blocks. */
   inval = 0;
   for (i = 0; i < fcb->NumSect; i++) {
      /* Search for invalidated file blocks. */
      adr = fs_adr_sig (i, fcb);
      adr = fs_rd_sig (adr, &fa.end);
      if (fa.end != fcb->InitVal) {
         for (prev = 0; ; prev = fa.end) {
            adr = fs_rd_alloc (adr, &fa);
            if (fa.fileID == (U16)(~fcb->InitVal)) {
               /* Add invalidated block size. */
               inval += (fa.end - prev);
            }
            if (fa.end == fcb->InitVal) break;
         }
      }
   } 
   total >>= 8;
   /* Return factor range 0..255 */
   return (inval/total);
}

/*----------------------------------------------------------------------------
 * end of file
 *---------------------------------------------------------------------------*/

⌨️ 快捷键说明

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