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

📄 readme.txt

📁 针对以arm处理器为核心的嵌入式平台的fat文件系统
💻 TXT
字号:
		Seekfor FAT System v1.1使用指南
================================================================================================================
1.简介
	Seekfor FAT System  v1.1是Seekfor 开发的一款嵌入式FAT16/FAT32文件系统支持软件,该软件包
完全支持FAT16/FAT32,支持多个分区和多个物理驱动器,同时提供基本兼容stdio.h的API.这样使用FAT系统就
非常简单了.例如,只要你正确调用了FAT_install(),那么以后就可以直接使用fopen("C:\\mp3\\demo.mp3","rb")
+fread()+fclose()来操作C:\mp3\demo.mp3文件了.如果你有多个物理驱动器或多个分区,那么和DOS一样,系统也
依此映射为C:,D:,E:等等,最多能有26个逻辑驱动器
===============================================================================================================
2.系统要求
	要移植Seekfor FAT System v1.1,首先,您的系统必须提供类似malloc(),free()动态内存分配的机制.同时因为
stdio.h使用的是缓冲式(预读式)文件读写,也就是说,读文件的时候会先读出一部分数据到缓冲区,写的时候是先写到
内存缓冲区中,所以需要您的系统有足够的内存.在当前版本,每一个打开的文件都有一簇内容的缓冲.所以每个文件所需
的缓冲区大小是FAT系统中的每簇扇区数X每扇区字节数得到的.因此在多任务环境,如果您需要打开多个文件,则必须保证
您的内存足够(当然如果内存不够的情况下,fopen()是返回NULL的).其次,建立文件或者建立文件夹需要指定建立的时间,
日期等信息,因此您的系统也应该提供能获取系统日期和系统时间的函数,最后,您的系统能正确完成扇区擦除,扇区读和扇区
写功能
===============================================================================================================
3.软件结构
	(1)FAT层API
		提供FAT_install(),FAT_terminate(),FAT_format()三个函数
	(2)文件层API
		提供基本兼容stdio.h的文件操作函数,添加一部分stdio.h不存在但需要使用的函数,如int attrib(char*filename,char attr)实现对文件或者文件夹更改属性,int label(char*new_label)实现更改卷标名等功能
	(3)移植层API
		定义在source\\portable.c中,这是需要用户自己重写的一些函数,源文件中的函数是实现在Win32下的代码
========================================================================================================================
4.和stdio.h的差异部分
	(1)findfirst()和findnext()中使用的结构ffblk和stdio.h有差异,您可以对比fat.h中ffblk的定义和Turbo C中ffblk 中的定义
	(2)stdio.h的fopen(char*filename,char*mode)中的文件打开模式mode支持"t"和"b",也就是文件有二进制文件和文本文件的区分
实际上个人感觉仅仅是\r\n上的处理(读文件读到\n会自动转化为\r\n,写文件写到\r\n只会写入\n),在现在存储容量较大的情况下,已经没有
什么必要支持此功能了.所以本软件包就不再支持"t"和"b"了.
========================================================================================================================
5.个人说明
	您可以自由使用,传播该软件,但不得更改软件中的所有关于本人的信息.传播该软件必须附带这个未修改的readme.txt文件.
本软件已在Visual C++下编译通过,对本软件格式化,或者建立的文件,文件夹,把*.img写入到优盘后,Win CE能够正确识别和读出.但当前版本没有支持长文件名,或许
下一个版本会支持这功能的.
	如果您有任何意见和建议,或者发现软件的BUG,请联系:
	Email:Seek_for@163.com,sfrad32@hotmail.com
	QQ:82054357
===========================================================================================================================
6.移植示范
	(1)第一步:改写source\portable.c中的所有代码(如果需要改写)
	(2)第二步:编写好自己的扇区擦除,扇区读,扇区 写三个函数,函数原型必须符合fat.h中定义的形式
	(3)调用FAT_install(),安装该驱动器
	(4)如果FAT_install()调用成功则可以使用文件层API操作文件了
	(5)退出时必须调用FAT_terminate(),否则会造成内存泄露
在Win32下,偶把一个U盘的内容通过WinHex读成一个文件FAT32.img,实现读写的代码如下:
	(1)source\portable.c中的代码不动,Win32直接支持malloc()和free()函数,文件日期固定是2006-1-1,时间固定是00:00:00,这样
每次建立文件和文件夹的日期和时间都是固定的
	(2)三个关于扇区的函数是:
	(注意,这三个函数必须是执行成功返回1,否则返回0)
	BOOL erase(DWORD dwSectors,DWORD dwBytesPerSector,void*user_data)
	{
		return 1;/*不需要擦除,直接返回1即可*/
	}

	BOOL read(DWORD dwSectors,void*buff,DWORD dwBytesPerSector,void*user_data)
	{
		HANDLE hFile=(HANDLE)user_data;/*user_data是文件指针*/
		SetFilePointer(hFile,dwSectors*dwBytesPerSector,NULL,FILE_BEGIN);
		return ReadFile(hFile,buff,dwBytesPerSector,&dwBytesPerSector,NULL);
	}

	BOOL write(DWORD dwSectors,void*buff,DWORD dwBytesPerSector,void*user_data)
	{
		HANDLE hFile=(HANDLE)user_data;
		SetFilePointer(hFile,dwSectors*dwBytesPerSector,NULL,FILE_BEGIN);
		return WriteFile(hFile,buff,dwBytesPerSector,&dwBytesPerSector,NULL);
	}
	(3)初始化和使用FAT代码如下:
	void main()
	{
		HANDLE hFile;
		FILE*p;
		/*先打开fat16.img*/
		hFile=CreateFile("C:\\fat16.img",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
		if(FAT_install(erase,read,write,(void*)hFile))/*如果安装成功*/
		{
			/*安装成功的情况下,系统会存在"C:"这个逻辑盘*/
			p=fopen("C:\\demo.txt","w");/*打开demo.txt写*/
			if(p)/*使用前先判断是良好的编程习惯*/
			{
				fputs("This is a demo program!!",p);/*写入字符串*/
				fclose(p);/*必须调用fclose(p),否则可能出现有文件名无内容或者内容不对,同是如果不调用fclose(),也会产生内存泄露*/
		
			}

			FAT_terminate();/*最后必须调用此函数释放FAT占用的内存*/
			CloseHandle(hFile);/*关闭fat16.img*/
		}
		
	}	

























		

⌨️ 快捷键说明

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