【 声明:版权全部,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

上学的时候就对文件系统非常有兴趣。可是苦于没有合适的fs代码能够学习。市面上的fs代码,要么太大。像linux一样,动不动就是几万行,几十万行。要么就是没有开源,你仅仅会使用它的接口,却不太清楚里面是怎么实现的。

一直到后来工作的时候,发现了fatfs这么一个开源库代码。

fatfs大小合适。内容也比較紧凑。仅仅要做好底层的接口移植就能够使用了。眼下fatfs用来管理最多的还是sd卡设备,nandflash用的比較少。

fatfs固然短小精悍,可是在pc上学习确实还是不方便,要是让fatfs能够在vc环境下自由地仿真调试就好了。

今天。还真找了这么一份代码,大家能够到http://www.raw-os.org/Download.html看一看,当中有一份Raw-OS 1.042 + yaffs + fatfs VC平台移植版的下载文档。执行环境是vs2010。有过windows开发经验的同学肯定不陌生。

当然,这份代码你不光能够学习fatfs,还能够学习yaffs文件系统。

事实上移植开源库基本上包含三个方面:(1)底层接口移植,通常是设备驱动等等;(2)数据移植,一般依据编译器重定义数据类型。(3)os的匹配移植,依据os设计自己须要的一些系统函数,比方创建thread、生成信号量、分配内存等等。等到做好了这些,就能够使用库提供的api,做我们自己想做的事情了。

最后。给出fatfs底层简单的代码移植方法,我认为还是蛮有意思的。

/*-----------------------------------------------------------------------*/
/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2012 */
/*-----------------------------------------------------------------------*/
/* If a working storage control module is available, it should be */
/* attached to the FatFs via a glue function rather than modifying it. */
/* This is an example of glue functions to attach various exsisting */
/* storage control module to the FatFs module with a defined API. */
/*-----------------------------------------------------------------------*/
#include "raw_api.h"
#include "diskio.h" /* FatFs lower layer API */
#include "ff.h"
//#include "usbdisk.h" /* Example: USB drive control */
#include <string.h>
#include <stdio.h> static RAW_U8 *simulated_space;
static int init_flag;
/*-----------------------------------------------------------------------*/
/* Inidialize a Drive */
/*-----------------------------------------------------------------------*/ DSTATUS disk_initialize (
BYTE drv /* Physical drive nmuber (0..) */
)
{ if (init_flag == 0) {
simulated_space = malloc(5 * 1024 *1024);
raw_memset(simulated_space, 0, 5 * 1024 *1024); if (simulated_space == 0) { RAW_ASSERT(0); } init_flag = 1;
} return 0;
} /*-----------------------------------------------------------------------*/
/* Get Disk Status */
/*-----------------------------------------------------------------------*/ DSTATUS disk_status (
BYTE drv /* Physical drive nmuber (0..) */
)
{ return 0;
} /*-----------------------------------------------------------------------*/
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/ DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { raw_memcpy(buff, simulated_space + (512 * sector), 512 * count); return RES_OK;
} /*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/ DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)
{ raw_memcpy(simulated_space + (512 * sector), buff, 512 * count); return RES_OK;
} /*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/ DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
DRESULT res = RES_PARERR; switch (ctrl) {
case CTRL_SYNC:
res = RES_OK;
break; case GET_SECTOR_COUNT:
*(DWORD*)buff = (10240); /*5M space*/
res = RES_OK;
break; case GET_SECTOR_SIZE:
*(WORD*)buff = 512;
res = RES_OK;
break; default:
break; } return res;
} DWORD get_fattime (void)
{ return 0;
}

随想录(fatfs的学习)的更多相关文章

  1. 鸿蒙轻内核源码分析:文件系统FatFS

    摘要:本文为大家介绍FatFS文件系统结构体的结构体和全局变量,并分析FatFS文件操作接口. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列二一 03 文件系统FatFS>,作者:zh ...

  2. [FatFs 学习] SD卡总结-SPI模式

    SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...

  3. STM32环境搭建/学习观点/自学方法 入门必看

    文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的 ...

  4. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)

    ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇   阅读目录 ASP.NET Identity 前世今生 建立 ASP.NET Identity 使用ASP.NET ...

  5. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  6. jQuery入门学习贴

    先引一下阮一峰大牛翻译的书<软件随想录>中的一句话: “ joel认为,软件开发,最缺的是天才.而我认为,最缺的是全才.什么“全”:全面.全局.全心全意.全力以赴. ” 最近再学习jQue ...

  7. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  8. FATFS

     (一),什么是文件管理系统 答:数据在PC上是以文件的形式储存在磁盘中的.这些数据的形式一般为ASCII码或二进制形式.简单点说就是:管理磁盘上的文件的方法的代码! 如:我们写到SD卡上面的数据 ...

  9. uCOS-II的学习笔记(共九期)和例子(共六个)

    源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...

随机推荐

  1. tarjan - tarjan的几种用法

    前言 tarjan是一种神奇的算法, 它可以在线性时间内求强联通分量/缩点/LCA/割点/割边/... 但由于博主咸鱼,暂时掌握不了这么多, 先讲讲其中最简单的一些. 概述 tarjan是以DFS为基 ...

  2. ThreeJs 3D 全景项目开发总结

    本文来自网易云社区 作者:唐钊 项目背景 那是在一个毫无征兆的下午,我还沉浸在 vue 的世界中,突然编辑跑过来说N的新官网想做一些3D全景的东西,一开始其实我的内心是拒绝的,一是没怎么实质性做过 W ...

  3. ant 入门级详解

    ant 入门级详解   [转载的地址(也是转载,未找到原文地址)]https://www.cnblogs.com/jsfx/p/6233645.html 1,什么是antant是构建工具2,什么是构建 ...

  4. IDEA界面创建Scala的Maven项目

    1. 创建Maven工程,勾选右侧的Create from archetype选项,然后选中下方的scala-archetype-simple选项,如图所示:2. 填写相应的GroupId.Artif ...

  5. 老男孩全栈python学习进程表

     老男孩Python高级全栈开发工程师-1  0001.开学典礼_ALEX简介  00:55:53 ☆  0002.职业生涯_来培训的目的  01:12:29 ☆  0003.课程目标  00:29: ...

  6. 【LeetCode】Binary Tree Inorder Traversal(二叉树的中序遍历)

    这道题是LeetCode里的第94道题. 题目要求: 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单 ...

  7. Leetcode 440.字典序第k小的数字

    字典序第k小的数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排 ...

  8. AtCoder Grand Contest 022

    A - Diverse Word Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Gotou ...

  9. Android中动态改变控件的大小的一种方法

    在Android中有时候我们需要动态改变控件的大小.有几种办法可以实现  一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸.这个是可以进行位置修改的,onMeasure不行. ...

  10. 漫谈登录桩(MockStub)的实现

    2014年6月4日,6月的第一个星期三,我正式入职百度,开始baiduer的工作.这不到2个月的时间,因为人力资源这边原因,我从INF部门离开,拉到了百度Hi-Server团队中来.2个完全不着调的岗 ...