【 声明:版权全部,欢迎转载,请勿用于商业用途。  联系信箱: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. Android 资源文件local.properties使用以及Gradle文件中的值、Manifests文件中的值

    这篇也是因为Gradle存储密钥问题一路填坑总结的,期初连.properties创建都有疑问 因为当时是在Android下查看新建的properties一直没法看到 因为Gradle Scripts是 ...

  2. day01_07.逻辑与字符串运算符

    &&(并且)====>发现&符号总是打错,记忆口令:&7(暗器),在数字7上面,在python中是and ||(或者)====>在python中是or . ...

  3. 利用bochs调试Linux 0.11内核

    引导程序调试软件bochs,跟配套的linux0.11内核img下载地址分别是: http://sourceforge.net/projects/bochs/http://www.oldlinux.o ...

  4. Spider爬虫-get、post请求

    1:概念: 爬虫就是通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 2:python爬虫与其他语言的比较: (1)php爬虫弊端:多进程多线程支持的不好 (2)java:代码臃肿,重 ...

  5. [python篇][1]configparser 问题汇总

    https://wiki.python.org/moin/ConfigParserExamples 1 错误一 nicodeEncodeError: 'ascii' codec can't encod ...

  6. [错误处理]python大小写敏感,关键字不要写错

    今天调试程序,发现了一个极为隐蔽的bug. True False关键字大小写写错了,然后半天没找出问题所在.

  7. 九度oj 题目1494:Dota

    题目描述: 大家都知道在dota游戏中,装备是对于英雄来说十分重要的要素. 英雄们不仅可以购买单个的装备,甚至某些特定的装备组合能够合成更强的装备. 为了简化问题,我们将每个装备对于英雄的功能抽象为一 ...

  8. mysqld got signal 11

    问题发生背景 问题实例之前使用的是percona server,是安装pmm镜像自带的数据库,之后通过mysqldump迁移到了MySQL server,目前是只有有pmm server 访问pmm库 ...

  9. hdu6103[尺取法] 2017多校6

    /*hdu6103[尺取法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; int T, m; ]; void solve ...

  10. hihoCoder #1157 建造金字塔

    这道题我想了一天才想清楚做法.AC 了之后去看别人写的题解,都是三言两语意识流式描述,我并不能读懂.我觉得很自卑,为何人家解这道题如此轻松.不过,我还是决定把我的解法写下来,并且一定要写清楚. 思路 ...