随想录(fatfs的学习)
【 声明:版权全部,欢迎转载,请勿用于商业用途。 联系信箱: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的学习)的更多相关文章
- 鸿蒙轻内核源码分析:文件系统FatFS
摘要:本文为大家介绍FatFS文件系统结构体的结构体和全局变量,并分析FatFS文件操作接口. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列二一 03 文件系统FatFS>,作者:zh ...
- [FatFs 学习] SD卡总结-SPI模式
SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...
- STM32环境搭建/学习观点/自学方法 入门必看
文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的 ...
- ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)
ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇 阅读目录 ASP.NET Identity 前世今生 建立 ASP.NET Identity 使用ASP.NET ...
- Hadoop学习笔记(6) ——重新认识Hadoop
Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...
- jQuery入门学习贴
先引一下阮一峰大牛翻译的书<软件随想录>中的一句话: “ joel认为,软件开发,最缺的是天才.而我认为,最缺的是全才.什么“全”:全面.全局.全心全意.全力以赴. ” 最近再学习jQue ...
- FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB
1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...
- FATFS
(一),什么是文件管理系统 答:数据在PC上是以文件的形式储存在磁盘中的.这些数据的形式一般为ASCII码或二进制形式.简单点说就是:管理磁盘上的文件的方法的代码! 如:我们写到SD卡上面的数据 ...
- uCOS-II的学习笔记(共九期)和例子(共六个)
源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...
随机推荐
- 教你玩App怎么赚钱(一)
在看这篇文章之前,你一定要接受一下谋哥的观点:金钱就是价值流通的手段,不要高看了钱. 玩App怎么赚钱?貌似谋哥写的文章超级多,把这个最重要的忘记了.说实在的,我为啥要写“玩App"呢?其实 ...
- 深入浅出理解Javascript原型概念以及继承机制(转)
在Javascript语言中,原型是一个经常被讨论到但是有非常让初学者不解的概念.那么,到底该怎么去给原型定义呢?不急,在了解是什么之前,我们不妨先来看下为什么. Javascript最开始是网景公司 ...
- PHP 函数 ignore_user_abort()
ignore_user_abort 设置与客户机断开是否会终止脚本的执行. 本函数返回 user-abort 设置的之前的值(一个布尔值). int ignore_user_abort ([ st ...
- Leetcode 448.找到所有数组中消失的数字
找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现 ...
- 用Navicat Premium同步表和数据
1.选择工具 2.选择数据库 3.下一步选择表 注意:同步表的时候是先删除存在的表再创建表同步数据 SQL Server数据库转换MySQL数据库 https://blog.csdn.net/zhan ...
- 九度oj 题目1455:珍惜现在,感恩生活
题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...
- 【转】Bad Smell(代码的坏味道)
1.Duplicated Code(重复的代码) 臭味行列中首当其冲的就是Duplicated Code.如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. ...
- OpenCV For Java环境搭建与功能演示
http://blog.csdn.net/jia20003/article/details/68944486
- C# Settings.settings的用处
1.定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改.可以使用数据网格视图,很方便: 2.读取配置值 t ...
- HDU-1529 Cashier Employment
据网上说这是到差分约束四星题... 可我觉得难吗? 比推DP方程容易... 两种约束方式,当然实现到程序就变成六种了... #include <cstdio> #include <c ...