znFAT移植与使用手册

上传人:小** 文档编号:158186469 上传时间:2022-10-03 格式:DOC 页数:19 大小:207.50KB
收藏 版权申诉 举报 下载
znFAT移植与使用手册_第1页
第1页 / 共19页
znFAT移植与使用手册_第2页
第2页 / 共19页
znFAT移植与使用手册_第3页
第3页 / 共19页
资源描述:

《znFAT移植与使用手册》由会员分享,可在线阅读,更多相关《znFAT移植与使用手册(19页珍藏版)》请在装配图网上搜索。

1、znFAT移植与使用手册(1)znFAT简介znFAT是一种高效、完备、精简且具有高可移植性的嵌入式FAT32文件系统解决方案。其主要特性如下:1)可通用于多种嵌入式CPU,如51、AVR、PIC、ARM、Cortex、DSP、MSP430、freescaleS12等等。2)所占用的RAM与ROM资源极少,并可由使用者视目标平台资源情况进行灵活配置,最简配置情况下,RAM的使用量约在800900字节左右。3)内建独特的数据写入加速算法以及扇区级的基于“预建文件”的数据写入机制。4)底层提供简单的单扇区读写驱动接口以及可选的硬件级多扇区连续读写驱动接口。(在提供多扇区连续读写驱动的情况下,数据读

2、写速度将有近24倍的提升,甚至更高。)5)提供清晰而强大的对函数模块裁剪的功能,极大限度的减小最终生成的可执行文件的体积。6)提供数据读取的重定向功能,使读到的数据无需缓冲暂存,直接流向应用目的。7)支持长文件名,长文件名最大长度可配置。默认配备并使用GB2312中文字符,并可选择是否使用OEM字符集,以减少程序体积。8)支持与Windows、Linux等操作系统兼容的路径表示,路径分隔可使用/或。支持无限深目录,支持长名目录。9)提供数据写入的实时模式,写入的任何数据,只怕只有一个字节,立即落实到物理存储器,防止因恶劣工作环境、干扰或其它原因引起的目标平台不可预见的死机或故障,造成数据丢失(

3、实时模式数据写入速度不高,内存中不缓冲任何数据)10)支持对存储设备的格式化,文件系统为FAT32。11)支持*与?通配,长名亦支持通配。12)支持文件与目录的删除,目录支持内含子目录与无限深级子目录结构的删除。13 )支持无限级目录创建。14 )支持多文件同时操作。15)支持多设备,即同时挂载多种存储设备,可在多种存储设备间任意切换。(2)znFAT的移植1)znFAT的代码结构主体:znFAT的具体实现。znFAT.h是对相关数据结构、宏的定义,以及对使用者可调用的功能函数的声明。znFAT.c是对功能函数的具体实现。移植相关:znFAT的移植相关文件。mytype.h中对类型进行重定义。

4、deviceio.c对存储设备物理扇区读写驱动进行具体实现。config.h对znFAT进行一些配置。其它头文件:cc_macro.h是znFAT中的功能函数依赖关系的定义。gb2uni.h是znFAT中GB2312向UNICODE转换的映射表。deviceio.h此文件向znFAT提供扇区读写驱动接口函数的声明。template.hznFAT中用于实现格式化功能的模板数据。2)znFAT的移植方法znFAT的移植其实非常简单,前提是已经有了现成的,较为成熟稳定的存储设备扇区读写等驱动函数。a.重新定义数据类型,如下图。根据硬件平台实际的数据类型对mytype.h中的类型进行重新定义,包括无符

5、号整型、有符号整形与固化数据的ROM类型。b.通过deviceio.c将存储设备驱动函数与znFAT标准物理接口进行接驳,包括存储设备初始化、单扇区读取、单扇区写入、多扇区连续读取与写入,多扇区连续清0I.加入存储设备驱动头文件,如下图。(deviceO.h只是举个例子)。ttincludemytype.httincludeconfig-h*乔储设备驱动头文件ttincludedeuiceio.h/卜include./dEvicd“存属设备驱动头文件structznFATioctl;用干扇区读写的ID控制,夬externUINT8Deu_No;设备号externUINT8*znFAT_BuFF

6、er;II.将存储设备初始化函数与znFAT_Device_Init函数接驳,如下图。UIHT8znFATDeuiceUINT8res=0.err=B:ioctl.just_deu-0;ioctl.just_sec=B;/职下曲答存储设备的初始化圉数调用,请沿袭以下格式res=DejlceBinltp;if(res)err|=0NB1;、存储设备的初始化函数/re5aaa0euice1_Init();/if(res)err|=0X92;returnres;运El错误码,如果某一设备初始化失败,贝丘相应位挂F除了将实际存储设备的初始化函数加入接口函数znFAT_Device_Init中,此函数中

7、其它代码请不要改动(以下同理)。并且最好按函数中的格式来写,在有多个存储设备的情况下,可以方便地知道每一个存储设备的初始化成功与否。III.将扇区读取驱动函数与znFAT_Device_Read_Sector函数进行接驳,如下图。UIMT8znFftT_Deuice_Read_Sector(U1HT32dddr.UIHTS-buffer)iF(btfferznFAT_Buffer)如果是针对znFATfB缓冲区的操作i.f(10CLi.jLstdev=DeuHO如杲理任赛iX嵐的扇区与内部第甘所X宜的康区f明最&(ioctl.justsec-addrBtfc9f-iDctl.justsec)/

8、RlJ不苒进行读颠,直接迂回-return0;else否!Hi,就烙堆近一汝操柞的崩区标记为当前恵区E:=ad(ir;uitch(DeuHa)有零小个存悩设各,就有梦少个r归。分支case0:itfhilEfDEUicELFiBacLSECtDFGdnFaFFEr】):break;/case1:单扇区读取驱动函数/unie(Deulcel_Read_Sector(addr,buffer);/break;/case,.,return8;IV.将扇区写入驱动函数与znFAT_Device_Write_Sector函数进行接驳,如下图。UINT8znFAT_Deuice_Write_Sector(U

9、INT32addr,UINT8*buFFer)if(buFFer=znFAT_BuFfer)如果数据缓冲区是两那缓冲ioctl_just_deu=Deu_Noioctl_just_sec=addr;;更新为当前设备号更新盲当前操作的扇区地址switch(Deu_No)W广i1:E_Sec1:of(日dd广IjijFFef);case9:while(DEuice/Zcase1:入驱动/while(Deuice1_Write_Sector(addr,buffer);/break;/case.-.return0;V.将多扇区连续读取驱动函数与znFAT_Device_Read_nSector函数进行

10、接驳,如下图。IJINTSzraFATJDeuindnSecthf(IJIHT32nsec:pJTNT32addrUlNTB*hnu1=fer)UIHT32i-0;if(0H-nsec)returnKifnflefU5E_HJLTISEC_R此玄决定是否便用硬件级连续扇区谨取驱动憔用单扁区读戦VI环的丸式实现案扁区连体读取caseB.XFori-i;insec;i*+)如果不使用通件级连续扇区读取,则便用单扇区读乏聒环的方式whilepeuic吃。li已3!吃贮td卜叫启jdir4i.biil=1=eirlj;单扇国读取軀动确敖buFfer-=512;“/case1:如果不便闱硬件级的連续扇区

11、读驭则使用单扇區读职卡循环的方式/wi|iile(Dieuice1_Read_Sectorfaddr+i.buffer);buFfer*-512;-/breah;sivitch(Dev_Nti)icaseB:uhile(Device0ReaidnSectorinsec.aiddr.buffer):;z爲仁=二為T跻酗期匿连舱瞬动曲UendlFreturni;znFAT中的多扇区连续读取驱动接口函数采用了两种实现方式,使用者可以通过修改config.h中的相应宏选择使用哪种实现方式。config.h中的宏如下图:/ttdeFineUSEMULTISECR曼用者是否提供多崩区匡睦读魅赛易区连续常驱

12、动比巨死的单扇区读:速度要此如果不提供各易区库续谟驱动,则znFAT拘飪插操年性能将二匕较低如昊此宏板汪唏,则程序中就认使氏卑扇区读万式:执彳亍敷率可能大扌佈扣如果这个宏被注释,则采用单扇区读取驱动+循环的实现方式;否则,将采用硬件级的多扇区连续读取驱动,此地,使用者必须提供存储设备的多扇区连续读取驱动函数。VI. 将多扇区连续写入驱动函数与znFAT_Device_Write_nSector函数进行接驳(与V 同理,config.h中对应的宏为#defineUSE_MULTISEC_W)VII. 将多扇区连续清零驱动函数与znFAT_Device_Clear_nSector函数进行接驳(与V

13、 与VI同理,config.h中对应的宏为#defineUSE_MULTISEC_CLEAR)以上就是znFAT的移植方法。(3)znFAT的使用方法znFAT为使用者提供了强大而完备的应用层函数。下面对znFAT的使用方法进行详细介绍。1)存储设备初始化函数UINT8znFAT_Device_Init(void)对znFAT中挂接的所有存储设备进行初始化,如果有任何一个存储设备初始化失败,则返回值不为0。返回值为8位整型,某一位为1,表示对应的存储设备初始化失败。比如0X02,表示设备1初始化失败。(前提是移植的时候,遵循函数的格式。)2)选择某一存储设备UINT8znFAT_Select_

14、Device(UINT8devno,structznFAT_Init_Args*pinitargs)znFAT是支持多设备的,即允许多种存储设备同时挂接在znFAT上,但某一时刻只能有一个存储设备被操作。因此,要对存储设备进行选择。与存储设备相关的有两个重要的全局变量Dev_No与pInit_Args,即设备号与指向记录存储设备文件系统相关参数信息的结构体的指针。设备号用于控制扇区读写接口函数中的分支,从而决定了使用哪个驱动函数;后者所指向的结构体中的参数将参与此存储设备上的文件操作过程中的相关计算。因此,在对某一存储设备进行操作之前,务必正确设置这两个变量。3) 格式化UINT8znFAT_

15、Make_FS(UINT32tt_sec,UINT16clu_sz)此函数将存储设备格式化为FAT32文件系统。此函数可能会运行较长时间,而且视存储设备容量不同时间长短亦会不同。参数tt_sec为存储设备的总扇区数,clu_sz为簇大小。其中,如果clu_sz为0,则说明由znFAT自动按照存储设备的容量选择比较合适的簇大小。要实现格式化功能,使用者必须给出ROM固化数据的读取函数的实现。包括三个函数:从ROM中读取一个字节:UINT8PGM_BYTE_FUN(ROM_TYPE_UINT8*ptr)从ROM中读取一个字:UINT16PGM_WORD_FUN(ROM_TYPE_UINT16*pt

16、r)从ROM中读取一个双字:UINT32PGM_DWORD_FUN(ROM_TYPE_UINT32*ptr)不同的CPU上,这些函数的实现可能不一样,比如在51和ARM上实现如下:UINT8PGM_BYTE_FUN(ROM_TYPE_UINT8*ptr)return*(ptr);UINT16PGM_WORD_FUN(ROM_TYPE_UINT16*ptr)return*(ptr);UINT32PGM_DWORD_FUN(ROM_TYPE_UINT32*ptr)return*(ptr);在AVR上为(WINAVRGCC平台):UINT8PGM_BYTE_FUN(ROM_TYPE_UINT8*pt

17、r)returnpgm_read_byte(ptr);UINT16PGM_WORD_FUN(ROM_TYPE_UINT16*ptr)returnpgm_read_word(ptr);UINT32PGM_DWORD_FUN(ROM_TYPE_UINT32*ptr)returnpgm_read_dword(ptr);至于其它CPU平台的具体实现,要依实际平台而定。注:在格式化前,必须设定要格式化的存储设备的设备号,实际应用代码如下:externUINT32Dev_No;intmain(void)Dev_No=0;/设定当前存储设备为设备0znFAT_Select_Device(0,&Init_Ar

18、gs);/选择设备znFAT_Init();/文件系统初始化znFAT_Make_FS(10000000,0);格式化,总扇区数为10000000,由znFAT/自动选择簇大小return0;4)对存储设备的文件系统的初始化UINT8znFAT_Init(void)此函数将对选定的存储设备上的文件系统进行初始化。其实质是将文件系统的一些重要参数装入到当前所选定的文件系统参数集合结构体中去,以备后面使用。此函数如果返回0,说明成功;否则失败,返回错误码:1:失败2:非FAT32文件系统。如下程序说明znFAT中文件系统初始化的一般过程:structznFAT_Init_ArgsInit_Args

19、;/初始化参数集合intmain(void)znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化printf(znFATinitOKn);/输出文件系统相关参数printf(BPB_Sector_No:%dn,Init_Args.BPB_Sector_No);printf(Total_SizeKB:%dn,Init_Args.Total_SizeKB);printf(BytesPerSector:%dn,Init_Args.BytesPerSector);printf(FATsectors:%dn,Init_Args.FATs

20、ectors);printf(SectorsPerClust:%dn,Init_Args.SectorsPerClust);printf(FirstFATSector:%dn,Init_Args.FirstFATSector);printf(FirstDirSector:%dn,Init_Args.FirstDirSector);printf(FSsec:%dn,Init_Args.FSINFO_Sec);printf(Next_Free_Cluster:%dn,Init_Args.Next_Free_Cluster);printf(FreenCluster:%dn,Init_Args.Fre

21、e_nCluster);znFAT_Flush();return0;4) 文件或目录的打开UINT8znFAT_Open_File(structFileInfo*pFI,INT8*filepath,UINT32n,UINT8is_file)此函数用于打开文件或目录。pFI是指向文件信息体的指针;filepath是文件或目录的路径;n是目标文件或目录的索引值;is_file用于指示要打开的是目录还是文件,1表示要打开文件,0为目录。文件或目录被成功打开之后,其相关信息即被存入pFI所指向的文件信息体,以备后面使用。文件或目录的名字支持通配名,比如/abc/xyz/a*b.txt表示/abc/xy

22、z/目录下的所有主文件名以a开头,以b结束,扩展名为txt的文件;/a/b/t?st.txt表示/a/b/目录下所有以t开头,第二个字符为任意字符,后面为st.txt的文件。在通配情况下,与通配名匹配的文件或目录可能会有多个,参数n用于选择这些文件或目录中的第n个。此函数的应用实例如下:1)打开一个文件structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设

23、备znFAT_Init();/文件系统初始化if(!znFAT_Open_File(&fileinfo,/abc/xyz/test.txt,0,1)printf(suc.toopenfile.n);printf(=n);printf(File_Name:%sn,fileinfo.File_Name);/文件名printf(File_Size:%d(bytes)n,fileinfo.File_Size);/文件大小printf(File_StartClust:%dn,fileinfo.File_StartClust);/文件开始簇printf(File_CurClust:%dn,fileinfo

24、.File_CurClust);/文件当前簇printf(File_CurSec:%dn,fileinfo.File_CurSec);/文件当前扇区printf(File_CurPos:%dn,fileinfo.File_CurPos);/文件当前扇区内偏移printf(File_CurOffset:%dn,fileinfo.File_CurOffset);/文件当前偏移量printf(=n);znFAT_Close_File(&fileinfo);elseprintf(failtoopenfile.n);znFAT_Flush();return0;2)通过文件通配功能列举出目录下所有匹配的文

25、件structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合intmain(void)unisignedcharn=0;znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化while(!znFAT_Open_File(&fileinfo,/abc/xyz/*.txt,n,1)printf(%d:File_Name:%sn,n,fileinfo.File_Name);/文件名n+;znFAT_C

26、lose_File(&fileinfo);znFAT_Flush();return0;5) 读取文件数据UINT32znFAT_ReadData(structFileInfo*pFI,UINT32offset,UINT32len,UINT8*app_Buffer)此函数用于对文件数据进行读取。pFI用于指向文件信息体,以从中获取文件的相关参数;offset为读取数据的起始位置;len为要读的数据长度;app_Buffer为指向应用数据缓冲区的指针。返回值为实际读到的数据长度。如果要读取的数据长度len大于文件当前剩余的有效数据长度。比如,从偏移量为40的位置开始读取100字节的数据,但是此文件

27、大小只有60字节,则len的值自动修正为20,实际读到的数据长度也为20。应用实例如下:structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合UINT8buffer20;intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化if(!znFAT_Open_File(&fileinfo,/test.txt,0,1)printf(suc.toopenfile.n);pri

28、ntf(=n);printf(File_Name:%sn,fileinfo.File_Name);printf(File_Size:%d(bytes)n,fileinfo.File_Size);printf(File_StartClust:%dn,fileinfo.File_StartClust);printf(File_CurClust:%dn,fileinfo.File_CurClust);printf(File_CurSec:%dn,fileinfo.File_CurSec);printf(File_CurPos:%dn,fileinfo.File_CurPos);printf(File

29、_CurOffset:%dn,fileinfo.File_CurOffset);printf(=n);len=znFAT_ReadData(&fileinfo,2,10,app_buffer);/从2位置读10个字节if(len)/如果实际读到的数据不为0,则认为成功printf(suc.toread%dbytes.n,len);app_bufferlen=0;printf(datareadis%s.n,app_buffer);elseprintf(nodataisread.n);znFAT_Close_File(&fileinfo);elseprintf(failtoopenfile.n);

30、znFAT_Flush();return0;5)文件数据读取(加数据重定向)UINT32znFAT_ReadDataX(structFileInfo*pfi,UINT32offset,UINT32len);此函数功能与4)基本相同,只不过它带有数据重定向功能,即数据不再放入缓冲中,而是可以直接通过函数进行处理。处理函数由使用者自行定义与实现,通过config.h中的宏引入到函数之中。#defineData_RedirectUART_Send_Byte/数据重定向函数名定义这个宏定义将处理函数定义为UART_Send_Byte,即通过串口发送一个字节的函数。这样,函数在读到每一个字节时,都会通过

31、串口将它直接发出。这样可以无需使用数据缓冲区,从而减少内存的使用量。6) 文件数据写入UINT32znFAT_WriteData(structFileInfo*pfi,UINT32len,UINT8*pbuf)此函数用于将数据写入到文件之中。pfi是指向文件信息体的指针;len要写入的数据长度;pbuf是指向应用数据缓冲区的指针。返回值为实际写入的数据量。应用实例如下:structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合UINT8buf20=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14

32、,15,16,17,18,19;intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化if(!znFAT_Open_File(&fileinfo,/znmcu.txt,0,1)/打开文件printf(suc.toopenfile.n);printf(=n);printf(File_Name:%sn,fileinfo.File_Name);printf(File_Size:%d(bytes)n,fileinfo.File_Size);printf(F

33、ile_StartClust:%dn,fileinfo.File_StartClust);printf(File_CurClust:%dn,fileinfo.File_CurClust);printf(File_CurSec:%dn,fileinfo.File_CurSec);printf(File_CurPos:%dn,fileinfo.File_CurPos);printf(File_CurOffset:%dn,fileinfo.File_CurOffset);printf(=n);len=znFAT_WriteData(&fileinfo,20,buf);/写入数据if(len)/如果写

34、入成功printf(suc.towrite%d(bytes).n,len);printf(=n);printf(File_StartClust:%dn,fileinfo.File_StartClust);printf(File_CurClust:%dn,fileinfo.File_CurClust);printf(File_CurSec:%dn,fileinfo.File_CurSec);printf(File_CurPos:%dn,fileinfo.File_CurPos);printf(File_CurOffset:%dn,fileinfo.File_CurOffset);printf(=

35、n);elseprintf(failtowritedata.n);znFAT_Close_File(&fileinfo);elseprintf(failtoopenfile.n);znFAT_Flush();return0;7) 文件创建UINT8znFAT_Create_File(structFileInfo*pfi,INT8*pfn,structDateTime*pdt)此函数用于实现文件的创建。pfi是指向文件信息体的指针,文件创建成功之后,文件的相关信息将被装入到文件信息体中;pfn是文件的路径;pdt是指向时间日期结构体的指针,这个时间信息用于设定文件的创建时间。应用实例如下:str

36、uctznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合structDateTimedt;/日期时间结构体变量UINT8buf20;intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化dt.date.year=2012;dt.date.month=12;dt.date.day=21;dt.time.hour=15;dt.time.min=14;dt.time.sec=35

37、;if(!znFAT_Create_File(&fileinfo,/znmcu.txt,&dt)printf(suc.tocreatefile.n);printf(=n);printf(File_Name:%sn,fileinfo.File_Name);printf(File_Size:%d(bytes)n,fileinfo.File_Size);printf(File_StartClust:%dn,fileinfo.File_StartClust);printf(File_CurClust:%dn,fileinfo.File_CurClust);printf(File_CurSec:%dn,

38、fileinfo.File_CurSec);printf(File_CurPos:%dn,fileinfo.File_CurPos);printf(File_CurOffset:%dn,fileinfo.File_CurOffset);printf(=n);znFAT_Close_File(&fileinfo);elseprintf(failtocreatefile.n);znFAT_Flush();return0;8) 目录创建UINT8znFAT_Create_Dir(INT8*pdp,structDateTime*pdt)此函数用于目录的创建。pdp为目录的路径,如/abc/xyz/,注

39、意此路径必须以/或结束;pdt是指向时间日期结构体的指针,作为目录的创建时间。应用实例如下:structznFAT_Init_ArgsInit_Args;/初始化参数集合structDateTimedt;/日期时间结构体变量UINT8buf20;intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化dt.date.year=2012;dt.date.month=12;dt.date.day=21;dt.time.hour=15;dt.time.mi

40、n=14;dt.time.sec=35;if(!znFAT_Create_Dir(/dir1/dir2/dir3/,&dt)printf(suc.tocreatedir.n);elseprintf(failtocreatedir.n);znFAT_Flush();return0;8)文件数据截断UINT8znFAT_Dump_Data(structFileInfo*pfi,UINT32offset)此函数用于实现文件数据的截断。pfi是指向文件信息体的指针;offset是数据偏移量,此函数将对此偏移量后面的数据进行删除。注意:进行对数据进行截断,实质上就是数据的删除时,最好确保没有文件处于打开

41、状态(处于非实时簇链更新工作模式下时,关于znFAT的工作模式,在后面会详细介绍)。应用实例:structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集合intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化if(!znFAT_Open_File(&fileinfo,/abc/xyz/test.txt,0,1)printf(suc.toopenfile.n);printf

42、(=n);printf(File_Name:%sn,fileinfo.File_Name);/文件名printf(File_Size:%d(bytes)n,fileinfo.File_Size);/文件大小printf(File_StartClust:%dn,fileinfo.File_StartClust);/文件开始簇printf(File_CurClust:%dn,fileinfo.File_CurClust);/文件当前簇printf(File_CurSec:%dn,fileinfo.File_CurSec);/文件当前扇区printf(File_CurPos:%dn,fileinfo

43、.File_CurPos);/文件当前扇区内偏移printf(File_CurOffset:%dn,fileinfo.File_CurOffset);/文件当前偏移量printf(=n);if(!znFAT_Dump_Data(&fileinfo,10)/文件数据截断printf(suc.todumpdata.n);elseprintf(failtodumpdata.n);znFAT_Close_File(&fileinfo);elseprintf(failtoopenfile.n);znFAT_Flush();return0;9) 文件删除UINT8znFAT_Delete_File(INT

44、8*filepath)此函数用于文件的删除。filepath是文件的路径。文件删除时,最好保证此时没有文件处于打开状态(znFAT处于非实时簇链更新的情况下)。应用实例如下:structznFAT_Init_ArgsInit_Args;/初始化参数集合intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化if(!znFAT_Delete_File(/znmcu.txt)printf(suc.todelfile.n);elseprintf(failt

45、odelfile.n);znFAT_Flush();return0;9)目录删除UINT8znFAT_Delete_Dir(INT8*dirpath)此函数用于实现对目录的删除。dirpath为目录的路径,如/abc/xyz,注意此路径不以/或结束。要删除的目录下如果有文件中子目录,并且有更深子目录,也会一并删除。应用实例如下:structznFAT_Init_ArgsInit_Args;/初始化参数集合intmain(void)znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件

46、系统初始化if(!znFAT_Delete_Dir(/dir1)printf(suc.todeldir.n);elseprintf(failtodeldir.n);znFAT_Flush();return0;10)大模式为文件预先准备存储空间UINT8znFAT_Prepare_Space_For_File(structFileInfo*pfi,UINT32datalen)大模式是znFAT中一种独特的数据写入方式1、保证文件数据的连续性2、提高数据写入的效率(大模式中,是预先将文件数据构建起来,然后再以扇区为单位向其写入数据)。此函数用于为文件预先准备存储空间,就是在构建一个文件数据的框架,

47、好往里面写入数据。应用实例见11)11)大模式向文件中写入数据UINT32znFAT_WriteData_Large(structFileInfo*pfi,UINT32offset,UINT32nSec,UINT8*pbuf)向由10)预先构建出来的空间中写入数据。pfi是指向文件信息体的指针;offset文件偏移量,从这个位置开始写数据,offset的值一定是扇区大小整数倍;nSec是要写入的扇区数;pbuf指向应用数据缓冲区。10)与11)的联合应用实例:structznFAT_Init_ArgsInit_Args;/初始化参数集合structFileInfofileinfo;/文件信息集

48、合UINT8buf1024;intmain(void)intlen=0,i=0;znFAT_Device_Init();/存储设备初始化znFAT_Select_Device(0,&Init_Args);/选择设备znFAT_Init();/文件系统初始化if(!znFAT_Open_File(&fileinfo,/znmcu.txt,0,1)printf(suctoopenfilen);if(!znFAT_Prepare_Space_For_File(&fileinfo,51200)/预建51200字节空间printf(suctopreparespaceforfile.n);printf(=

49、n);printf(File_Name:%sn,fileinfo.File_Name);printf(File_Size:%d(bytes)n,fileinfo.File_Size);printf(File_StartClust:%dn,fileinfo.File_StartClust);printf(File_CurClust:%dn,fileinfo.File_CurClust);printf(File_CurSec:%dn,fileinfo.File_CurSec);printf(File_CurPos:%dn,fileinfo.File_CurPos);printf(File_CurO

50、ffset:%dn,fileinfo.File_CurOffset);printf(=n);for(i=0;i1024;i+)bufi=;/向应用数据缓冲区中装入数据/写入2个扇区len=znFAT_WriteData_Large(&fileinfo,fileinfo.File_CurOffset,2,buf);if(len!=0)printf(writesectors:%dn,len);elseprintf(failtopreparespaceforfilen);znFAT_Close_File(&fileinfo);elseprintf(failtoopenfilen);znFAT_Flush();return0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!