想找一个文件系统源程序,到底那个好用,与大家讨论

[复制链接]
16183|23
 楼主| 古道热肠 发表于 2009-4-21 15:07 | 显示全部楼层 |阅读模式
想找一个代码依功能可裁剪,开源的,性能稳定的文件系统,大家说说有什么好用的,俺看了一下walutly主推的eFS和FATFS,那eFS是个大胖子,一编译,我的家伙,ARM级还占28K,8位机就更大了.&nbsp;FAT&nbsp;FS倒蛮小巧精致的,俺看了一下,还不错,大家说说还有更好的吗?想找个好的好好研究研究.<br />
 楼主| 古道热肠 发表于 2009-4-21 15:10 | 显示全部楼层

FAT FS文件系统功能介绍如下.

FAT&nbsp;File&nbsp;System&nbsp;Module<br /><br />--------------------------------------------------------------------------------<br /><br />&nbsp;<br />FatFs&nbsp;is&nbsp;a&nbsp;generic&nbsp;file&nbsp;system&nbsp;module&nbsp;to&nbsp;implement&nbsp;the&nbsp;FAT&nbsp;file&nbsp;system&nbsp;to&nbsp;small&nbsp;embedded&nbsp;systems.&nbsp;The&nbsp;FatFs&nbsp;is&nbsp;written&nbsp;in&nbsp;compliance&nbsp;with&nbsp;ANSI&nbsp;C,&nbsp;therefore&nbsp;it&nbsp;is&nbsp;independent&nbsp;of&nbsp;hardware&nbsp;architecture.&nbsp;It&nbsp;can&nbsp;be&nbsp;incorporated&nbsp;into&nbsp;cheap&nbsp;microcontrollers,&nbsp;such&nbsp;as&nbsp;8051,&nbsp;PIC,&nbsp;AVR,&nbsp;SH,&nbsp;Z80,&nbsp;H8,&nbsp;ARM&nbsp;and&nbsp;etc...,&nbsp;without&nbsp;any&nbsp;change.<br /><br />Features<br />FAT12,&nbsp;FAT16&nbsp;and&nbsp;FAT32.&nbsp;<br />Multiple&nbsp;volumes&nbsp;(physical&nbsp;drives&nbsp;and&nbsp;partitions).&nbsp;<br />Two&nbsp;partitioning&nbsp;rules:&nbsp;FDISK&nbsp;and&nbsp;Super-floppy.&nbsp;<br />Various&nbsp;configuration&nbsp;options:&nbsp;<br />Long&nbsp;file&nbsp;name&nbsp;(LFN)&nbsp;support.&nbsp;<br />Selectable&nbsp;code&nbsp;pages&nbsp;including&nbsp;DBCS.&nbsp;<br />Multitask&nbsp;support.&nbsp;<br />Multiple&nbsp;sector&nbsp;size&nbsp;support.&nbsp;<br />Read-only,&nbsp;minimized&nbsp;API,&nbsp;buffer&nbsp;configuration&nbsp;and&nbsp;etc...&nbsp;<br />Application&nbsp;Interface<br />FatFs&nbsp;module&nbsp;provides&nbsp;following&nbsp;functions.<br /><br />f_mount&nbsp;-&nbsp;Register/Unregister&nbsp;a&nbsp;Work&nbsp;Area&nbsp;<br />f_open&nbsp;-&nbsp;Open/Create&nbsp;a&nbsp;File&nbsp;<br />f_close&nbsp;-&nbsp;Close&nbsp;a&nbsp;File&nbsp;<br />f_read&nbsp;-&nbsp;Read&nbsp;File&nbsp;<br />f_write&nbsp;-&nbsp;Write&nbsp;File&nbsp;<br />f_lseek&nbsp;-&nbsp;Move&nbsp;File&nbsp;R/W&nbsp;Pointer&nbsp;<br />f_truncate&nbsp;-&nbsp;Truncate&nbsp;File&nbsp;<br />f_sync&nbsp;-&nbsp;Flush&nbsp;Cached&nbsp;Data&nbsp;<br />f_opendir&nbsp;-&nbsp;Open&nbsp;a&nbsp;Directory&nbsp;<br />f_readdir&nbsp;-&nbsp;Read&nbsp;a&nbsp;Directory&nbsp;Item&nbsp;<br />f_getfree&nbsp;-&nbsp;Get&nbsp;Free&nbsp;Clusters&nbsp;<br />f_stat&nbsp;-&nbsp;Get&nbsp;File&nbsp;Status&nbsp;<br />f_mkdir&nbsp;-&nbsp;Create&nbsp;a&nbsp;Directory&nbsp;<br />f_unlink&nbsp;-&nbsp;Remove&nbsp;a&nbsp;File&nbsp;or&nbsp;Directory&nbsp;<br />f_chmod&nbsp;-&nbsp;Change&nbsp;Attribute&nbsp;<br />f_utime&nbsp;-&nbsp;Change&nbsp;Timestamp&nbsp;<br />f_rename&nbsp;-&nbsp;Rename/Move&nbsp;a&nbsp;File&nbsp;or&nbsp;Directory&nbsp;<br />f_mkfs&nbsp;-&nbsp;Create&nbsp;a&nbsp;File&nbsp;System&nbsp;on&nbsp;the&nbsp;Drive&nbsp;<br />f_forward&nbsp;-&nbsp;Forward&nbsp;file&nbsp;data&nbsp;to&nbsp;the&nbsp;stream&nbsp;directly&nbsp;<br />f_gets&nbsp;-&nbsp;Read&nbsp;a&nbsp;string&nbsp;<br />f_putc&nbsp;-&nbsp;Write&nbsp;a&nbsp;character&nbsp;<br />f_puts&nbsp;-&nbsp;Write&nbsp;a&nbsp;string&nbsp;<br />f_printf&nbsp;-&nbsp;Write&nbsp;a&nbsp;formatted&nbsp;string&nbsp;<br />Disk&nbsp;I/O&nbsp;Interface<br />Since&nbsp;the&nbsp;FatFs&nbsp;module&nbsp;is&nbsp;completely&nbsp;separated&nbsp;from&nbsp;disk&nbsp;I/O&nbsp;layer,&nbsp;it&nbsp;requires&nbsp;following&nbsp;functions&nbsp;to&nbsp;lower&nbsp;layer&nbsp;to&nbsp;read/write&nbsp;physical&nbsp;disk&nbsp;and&nbsp;to&nbsp;get&nbsp;current&nbsp;time.&nbsp;The&nbsp;low&nbsp;level&nbsp;disk&nbsp;I/O&nbsp;module&nbsp;is&nbsp;not&nbsp;a&nbsp;part&nbsp;of&nbsp;FatFs&nbsp;module&nbsp;and&nbsp;it&nbsp;must&nbsp;be&nbsp;provided&nbsp;by&nbsp;user.&nbsp;The&nbsp;sample&nbsp;drivers&nbsp;are&nbsp;also&nbsp;available&nbsp;in&nbsp;the&nbsp;resources.<br /><br />disk_initialize&nbsp;-&nbsp;Initialize&nbsp;disk&nbsp;drive&nbsp;<br />disk_status&nbsp;-&nbsp;Get&nbsp;disk&nbsp;status&nbsp;<br />disk_read&nbsp;-&nbsp;Read&nbsp;sector(s)&nbsp;<br />disk_write&nbsp;-&nbsp;Write&nbsp;sector(s)&nbsp;<br />disk_ioctl&nbsp;-&nbsp;Control&nbsp;device&nbsp;dependent&nbsp;features&nbsp;<br />get_fattime&nbsp;-&nbsp;Get&nbsp;current&nbsp;time&nbsp;<br />Resources<br />The&nbsp;FatFs&nbsp;module&nbsp;is&nbsp;a&nbsp;free&nbsp;software&nbsp;and&nbsp;is&nbsp;opened&nbsp;for&nbsp;education,&nbsp;research&nbsp;and&nbsp;development.&nbsp;You&nbsp;can&nbsp;use,&nbsp;modify&nbsp;and/or&nbsp;republish&nbsp;it&nbsp;for&nbsp;personal,&nbsp;non-profit&nbsp;or&nbsp;commercial&nbsp;use&nbsp;without&nbsp;any&nbsp;restriction&nbsp;under&nbsp;your&nbsp;responsibility.<br /><br />FatFs&nbsp;R0.07a&nbsp;|&nbsp;Updates&nbsp;|&nbsp;Patches&nbsp;Apr&nbsp;18,&nbsp;2009&nbsp;<br />FatFs&nbsp;User&nbsp;Forum&nbsp;<br />FatFs&nbsp;module&nbsp;application&nbsp;note&nbsp;Apr&nbsp;14,&nbsp;2009&nbsp;<br />Sample&nbsp;projects&nbsp;(AVR,&nbsp;LPC2000,&nbsp;H8/300H,&nbsp;TLCS-870/C,&nbsp;PIC&nbsp;and&nbsp;V850ES)&nbsp;Apr&nbsp;18,&nbsp;2009&nbsp;<br />ARM-Projects&nbsp;by&nbsp;Martin&nbsp;THOMAS&nbsp;(examples&nbsp;for&nbsp;LPC2000&nbsp;and&nbsp;AT91SAM)&nbsp;<br />Benchmark&nbsp;1&nbsp;(ATmega64/9.2MHz&nbsp;with&nbsp;MMC&nbsp;via&nbsp;SPI,&nbsp;HDD/CFC&nbsp;via&nbsp;GPIO)&nbsp;<br />Benchmark&nbsp;2&nbsp;(LPC2368/72MHz&nbsp;with&nbsp;MMC&nbsp;via&nbsp;MCI)&nbsp;<br />FAT32&nbsp;Specification&nbsp;by&nbsp;Microsoft&nbsp;(The&nbsp;reference&nbsp;document&nbsp;on&nbsp;FAT&nbsp;file&nbsp;system)&nbsp;<br />How&nbsp;to&nbsp;Use&nbsp;MMC/SDC&nbsp;<br />Previous&nbsp;versions:&nbsp;R0.07&nbsp;|&nbsp;R0.06&nbsp;|&nbsp;Earlyer&nbsp;than&nbsp;R0.06&nbsp;<br />
 楼主| 古道热肠 发表于 2009-4-21 15:14 | 显示全部楼层

大家是否发现有能同时打开多个文件的嵌入式FAT文件系统呢?

同时打开多个文件进行存取是拷贝文件或大型软件必备的底层接口.
mpuhome 发表于 2009-4-22 08:55 | 显示全部楼层

FAT FS

这个确实小巧啊,我的2808开发板上就用这个,但不象UCFS对OS支持比较好(0.07版本支持多任务了,不知道效果如何?)<br /><br />同时打开多个文件,这个其实要求有比较大的内存,和小巧有些矛盾了<br /><br />uCFS也是个不错的选择,就是要收费<br /><br />
alex74 发表于 2009-4-22 08:56 | 显示全部楼层

我有个自己写的

结构清晰,速度快。但是不小巧。还支持中文长文件名,你有兴趣么?
 楼主| 古道热肠 发表于 2009-4-22 11:12 | 显示全部楼层

哈哈,回楼上,有兴趣,说说有哪些功能

能否放个Demo版或弄个带库的出来瞧瞧接口,俺过去也曾自己整个一个,接口基本与C语言的兼容.但感觉太大了,不适合嵌入式系统用.<br />
alex74 发表于 2009-4-22 12:58 | 显示全部楼层

.....

功能<br />目录操作:创建,删除<br />文件操作:创建,删除,打开,读写等<br />文件搜索<br />格式化<br />unicode长文件名<br />都是普通功能,硬件读写接口参照zlg接口,别的都自己写的。<br />你留个qq或者啥的,我给代码,pc上读写u盘的仿真代码。但是不想开源。<br />不过我不支持fat16,因为我用的都是大容量。
alex74 发表于 2009-4-22 13:18 | 显示全部楼层

...

我这个文件系统编出来很大,我本来是用在大内存的dsp上的,所以根本不考虑内存问题,一切为了速度。
 楼主| 古道热肠 发表于 2009-4-22 16:12 | 显示全部楼层

回alex74,PC机上如何读写仿真U盘

俺过去在PC机调试时,都是直接调用DOS接口读写扇区函数,那时还是用的me,估计现在的XP,不让直接控制扇区的.<br />还真想在PC机上搭个好点的平台,直接测试文件系统的源代码.就是数据载体比较难解决,(主要是指能看到结果),过去有时基至想到整个PCI卡带上读U盘的功能,用真实的U盘作为存储介质来测试.现在看来通过USB口读写读写U盘扇区或通过SD卡读卡器读写SD卡扇区比较可行.<br /><br />俺签名中有个邮箱,xg_2004_sy@126.com,一直在用,可交流交流.
armecos 发表于 2009-4-22 18:51 | 显示全部楼层

不建议用DOS那种接口,最好用类UNIX的,

很多Linux下的程序可以无障碍移植。<br /><br />*********************************<br />*&nbsp;《ecos增值包》之FAT文件系统篇&nbsp;*<br />*********************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---FAT12/16/32在SD/MMC/CF/HDD等介质上的实现<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007/10/28&nbsp;asdjf@163.com&nbsp;www.armecos.com<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;很多网友对实现FAT文件系统感兴趣,经常有人来信询问设计思路或者索要源码,其实,使用《ecos增值包》是不需要理会这些细节的,直接使用UNIX文件系统API接口就能在各种介质上完成FAT文件访问,不过,我们仍然愿意为《ecos增值包》正式用户提供这个设计思路文档。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;《ecos增值包》支持FAT12/16/32,标准UNIX文件系统接口,各种容量的SD/MMC/CF/HDD等介质,充分考虑到了速度、效率、容量、低功耗、简单性、安全性、可靠性、扩展性、并发访问、存储介质多样等各种性能指标参数。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;下面我们分四个层次逐步讲解FAT文件系统的设计思路。注意:《ecos增值包》不仅仅只支持FAT文件系统,它还支持RAMFS/ROMFS/JFFS2/Yaffs/TrueFFS等,所以下面介绍的内容是高度抽象的,不仅仅只适合于FAT文件系统。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;1、首先,我们介绍块设备驱动的特点和实现,抽象出SD/MMC/CF/HDD等块设备共有的特性,设计出适合现在及未来任何介质的万能块设备驱动,进而实现FAT&nbsp;over&nbsp;anything。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、接着讨论高速块设备驱动,这是体现块设备性能的关键指标。设计思路很简单,就是提供一个cache,读写数据尽量在高速cache中完成,必要时才读写真正的慢速块设备。这里用到了链表、HASH映射、排序二叉树等复杂的数据结构。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;3、有了高速的块设备驱动,文件系统的性能就有了物质保障,但是恰当地选择下层和上层数据结构,能进一步将性能发挥到极致。这里给出了块设备、磁盘、目录、节点等的数据结构描述。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;4、准备好了FAT相关的数据结构,接着就可以提供操作这些数据结构的函数,当然这是完全符合UNIX文件系统API接口的函数集合。用户可以使用简单统一的mount/open/read/write/close等API函数操作各种块设备。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;最后,我们说明UNIX相对DOS文件系统的优势并举例说明UNIX文件系统的使用方法。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;----------<br />&nbsp;&nbsp;&nbsp;&nbsp;块设备驱动<br />&nbsp;&nbsp;&nbsp;&nbsp;----------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SD卡、MMC卡、CF卡、硬盘等大容量存储设备虽然介质形态不同,但都可以抽象出共同的特征。一般,此类设备以数据块方式被访问,工作过程中可能被移动改变。比如:动态插入、移除、改变设备,这就要求OS能够检测出设备是否在位,是否被删除,是否被更换成另一个设备。此外,有些设备提供了电源开关,在不需要使用时可以关闭电源以节省能量。有些设备涉及机械运动,如:硬盘磁头移动,这时采用一些软件算法可以大大提高性能,如:电梯排队算法,聚集操作等。还有,通过DMA&nbsp;+&nbsp;中断等硬件加速方式可以进一步提高吞吐效率。ecos比Linux设备驱动强在没有复杂I/O结构,不涉及特权模式,可以直接操作设备,这样代码大小和读写效率都比较好。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;经过抽象,所有块设备驱动都可以总结为下面几种操作:读read、写write、设备自身属性操作ioctl(如弹出/关闭光盘托盘等)、初始化init、查找/枚举设备lookup。不同的设备操作方法不尽相同,如SD卡通过SPI总线访问设备而CF卡通过ATA接口访问,但是经过驱动程序抽象后,上层软件将看到统一的设备接口,所以不论硬盘、光盘、SD卡、CF卡,经过设备驱动抽象后对高层软件来说都是一样的。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SD/MMC/CF/HDD/CDROM/DVDROM等介质的设备驱动详见各相关部分的描述,下面给出一个IDE硬盘接口函数的例子(其他介质与此类似,函数内部操作替换成特定介质要求的操作,对外接口不变,都是下面这个样子):<br /><br />static&nbsp;cyg_bool&nbsp;ide_disk_init(struct&nbsp;cyg_devtab_entry&nbsp;*tab);<br /><br />static&nbsp;Cyg_ErrNo&nbsp;ide_disk_read(disk_channel&nbsp;*chan,&nbsp;void&nbsp;*buf,&nbsp;cyg_uint32&nbsp;len,&nbsp;cyg_uint32&nbsp;block_num);<br /><br />static&nbsp;Cyg_ErrNo&nbsp;ide_disk_write(disk_channel&nbsp;*chan,&nbsp;const&nbsp;void&nbsp;*buf,&nbsp;cyg_uint32&nbsp;len,&nbsp;cyg_uint32&nbsp;block_num);<br /><br />static&nbsp;Cyg_ErrNo&nbsp;ide_disk_get_config(disk_channel&nbsp;*chan,&nbsp;cyg_uint32&nbsp;key,&nbsp;const&nbsp;void&nbsp;*xbuf,&nbsp;cyg_uint32&nbsp;*len);<br /><br />static&nbsp;Cyg_ErrNo&nbsp;ide_disk_set_config(disk_channel&nbsp;*chan,&nbsp;cyg_uint32&nbsp;key,&nbsp;const&nbsp;void&nbsp;*xbuf,&nbsp;cyg_uint32&nbsp;*len);<br /><br />static&nbsp;Cyg_ErrNo&nbsp;ide_disk_lookup(struct&nbsp;cyg_devtab_entry&nbsp;**tab,&nbsp;struct&nbsp;cyg_devtab_entry&nbsp;*sub_tab,&nbsp;const&nbsp;char&nbsp;*name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--------------<br />&nbsp;&nbsp;&nbsp;&nbsp;高速块设备驱动<br />&nbsp;&nbsp;&nbsp;&nbsp;--------------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;仅有块设备驱动还是远远不够的,因为这些大容量存储设备相对CPU而言都是慢速设备,如果不采取任何措施直接访问,那么效果会非常不令人满意。更何况现代的虚拟存储系统会把内存中暂时不需要的数据转移到硬盘上,从而模拟出一个比实际大得多的内存,所以,块设备驱动不仅与文件系统性能有关,还和OS虚拟内存性能有关。如何实现高速大容量数据访问呢?一个非常有效的办法就是通过内存提供一块CACHE暂存数据,读写数据尽量在高速cache中完成,必要时才读写真正的慢速大容量块设备。这种方法存在一定的风险,如果在数据真正写入设备前掉电,那么cache缓存里的数据将丢失。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;上面笼统地说到要缓存数据,但是何时缓存,怎么缓存,切入点在什么地方并没有说清楚。其实具体到FAT文件系统里,就是要缓存FAT表数据、文件目录和文件数据。其他一些数据,如引导信息等在设备枚举初始化后就被存到相应的设备信息结构体里了,以后再访问这些数据直接从这些结构体里提取即可,不需要每次都重新读设备。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;先说说FAT表是如何缓存的吧。一般来说FAT表大小不固定,FAT表数量也可以有多个(用于冗余备份,提高安全性),而且操作频繁,属于关键数据,但是如果一次将整个FAT表缓存,首先不知道整个FAT表有多大,数量有多少,即使知道这些,内存可能也装不下整个FAT表,况且只有少部分FAT信息被用到,那么怎么缓存FAT表才是最佳的呢?办法就是只缓存用到的一小块FAT信息,把整个FAT表打散成一个个小碎片,用到哪块就缓存哪块。问题又来了,你是如何知道某个小碎片对应哪个FAT表片段啊?如果内存不够用了该怎么办啊?<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;呵呵,这就要用到一系列的复杂数据结构了。FAT表里使用“簇”来描述信息,而内存中使用内存块来表述,所以,首先要写一个“簇号&lt--&gt块号”的互换函数,使得FAT信息和内存块对应起来。然后把缓存的FAT碎片用链表连接起来,以后每次读写FAT信息时,先在这个链表里查找该FAT信息是否已经被缓存,判断方法是把簇号转换成块号,在链表里搜索有无相同块号的内存块,如果有相同块号的内存块,就说明此FAT片段先前已经被缓存。与此同时,把该块内存块移动到链表头部,根据临近相关原理,下次被搜索的概率最大,因为离头部最近,所以可以提高搜索效率和命中率。如果内存不够用了,那么首先释放链表末尾的数据块,因为那个位置的内存块意味着最长时间没有被访问过。如果事先将各个内存块连成排序二叉树,那么查找速度还会提升。任何写入的FAT信息将被同时写入多个FAT表里。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;说完FAT表这个最关键的数据缓存,接着就要说说文件目录的缓存。和通过簇号信息访问FAT表不同,目录是通过路径名访问的,那么如何通过路径名得知目录是否被缓存呢?ecos文件系统和UNIX文件系统一样,把文件和目录抽象成节点node,在node里保存相关信息。从文件名映射到节点的最好办法就是HASH映射。<br /><br />static&nbsp;unsigned&nbsp;int&nbsp;<br />hash_fn(const&nbsp;char&nbsp;*str,&nbsp;unsigned&nbsp;int&nbsp;strlen)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i&nbsp;=&nbsp;0,&nbsp;val&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i++&nbsp;&lt&nbsp;strlen)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;(val&nbsp;^&nbsp;(int)toupper(*str++))&nbsp;&lt&lt&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(val);<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;通过上面提供的HASH算法,给出文件路径名和其长度,立即可以得到节点号。如:node&nbsp;=&nbsp;hash_fn(filename,&nbsp;filenamelen)。HASH算法可能产生碰撞,此时需进一步调整,不过总体而言,映射效率很高。文件名比较时先比较长度再比较文件名字串,这样速度快。通过node_hash_find()函数可以立即判断目录是否已在缓存里。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;最后说下文件数据缓存。FAT文件对应簇号,只要根据簇号找到内存块就可以找到数据缓存,和FAT表的缓存原理一样。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;读数据时,先判断cache缓存里是否已存在,如果存在就直接读取数据,否则,从真实设备中读取数据并缓存;<br />&nbsp;&nbsp;&nbsp;&nbsp;写数据时,直接写入cache中,没有就创建一个内存缓存块,当释放缓存时,数据写入实际设备中。只要在缓存链表里的数据肯定都是“脏”的。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;通过缓存FAT表片段、文件目录项、文件数据,大容量慢速存储设备就被虚拟成了一个高速的块设备。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;-----------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;FAT文件系统相关数据结构<br />&nbsp;&nbsp;&nbsp;&nbsp;-----------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;有了高速的块设备驱动,接下来就要在上面实现FAT文件系统,这时,看到的块设备就是统一的FAT格式,FAT文件系统的本意也就是在块设备上以FAT格式组织文件信息。FAT文件系统的操作对象就是一堆数据结构。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;首先介绍一个宏定义:DISK_INSTANCE(_number_,_port_,_chan_,_mbr_supp_,_name_)<br />&nbsp;&nbsp;&nbsp;&nbsp;不同的介质支持的FAT结构略有不同,如软盘和CF卡不支持MBR而SD卡和硬盘就支持。有些设备格式化为几个逻辑分区,每个分区都要用一个名字对应。这个宏就是用来通知OS介质支持的具体FAT格式的。如:<br /><br />DISK_INSTANCE(0,&nbsp;0,&nbsp;0,&nbsp;true,&nbsp;&quot;/dev/hda/&quot;);<br />DISK_INSTANCE(1,&nbsp;0,&nbsp;1,&nbsp;true,&nbsp;&quot;/dev/hdb/&quot;);<br />DISK_INSTANCE(2,&nbsp;1,&nbsp;0,&nbsp;true,&nbsp;&quot;/dev/hdc/&quot;);<br />DISK_INSTANCE(3,&nbsp;1,&nbsp;1,&nbsp;true,&nbsp;&quot;/dev/hdd/&quot;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;就表示支持4个硬盘,IDE0的主从,IDE1的主从,均支持MBR,其设备名后缀依次为a、b、c、d。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;文件目录项结构体<br />typedef&nbsp;struct&nbsp;fatfs_dir_entry_s<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename[12+1];&nbsp;//&nbsp;File&nbsp;name<br />&nbsp;&nbsp;&nbsp;&nbsp;mode_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Node&nbsp;type<br />&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Size&nbsp;of&nbsp;file&nbsp;in&nbsp;bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Creation&nbsp;timestamp<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Last&nbsp;access&nbsp;timestamp<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Last&nbsp;write&nbsp;timestamp<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;priv_data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Private&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cluster;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;First&nbsp;cluster&nbsp;number<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent_cluster;&nbsp;//&nbsp;First&nbsp;cluster&nbsp;of&nbsp;parent&nbsp;dentry<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_data_pos_t&nbsp;&nbsp;disk_pos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Position&nbsp;of&nbsp;dir&nbsp;entry&nbsp;on&nbsp;disk<br />#ifdef&nbsp;CYGCFG_FS_FAT_USE_ATTRIBUTES<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_fs_attrib_t&nbsp;&nbsp;&nbsp;&nbsp;attrib;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Attribute&nbsp;bits&nbsp;for&nbsp;DOS&nbsp;compatability<br />#endif&nbsp;//CYGCFG_FS_FAT_USE_ATTRIBUTES<br />}&nbsp;fatfs_dir_entry_t;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;存储设备全局结构体<br />typedef&nbsp;struct&nbsp;fatfs_disk_s<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;sector_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;size&nbsp;in&nbsp;bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;sector_size_log2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;size&nbsp;log2<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;cluster_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Cluster&nbsp;size&nbsp;in&nbsp;bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;cluster_size_log2;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Cluster&nbsp;size&nbsp;log2&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_tbl_pos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Position&nbsp;of&nbsp;the&nbsp;first&nbsp;FAT&nbsp;table<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_tbl_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;FAT&nbsp;table&nbsp;size&nbsp;in&nbsp;bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_tbl_nents;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Number&nbsp;of&nbsp;entries&nbsp;in&nbsp;FAT&nbsp;table<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_tbls_num;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Number&nbsp;of&nbsp;FAT&nbsp;tables<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_root_dir_pos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Position&nbsp;of&nbsp;the&nbsp;root&nbsp;dir<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_root_dir_size;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Root&nbsp;dir&nbsp;size&nbsp;in&nbsp;bytes&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_root_dir_nents;&nbsp;&nbsp;&nbsp;//&nbsp;Max&nbsp;number&nbsp;of&nbsp;entries&nbsp;in&nbsp;root&nbsp;dir<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_root_dir_cluster;&nbsp;//&nbsp;Cluster&nbsp;number&nbsp;of&nbsp;root&nbsp;dir&nbsp;(FAT32)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;fat_data_pos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Position&nbsp;of&nbsp;data&nbsp;area<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_type_t&nbsp;&nbsp;fat_type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Type&nbsp;of&nbsp;FAT&nbsp;-&nbsp;12,&nbsp;16&nbsp;or&nbsp;32&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_io_handle_t&nbsp;&nbsp;dev_h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Disk&nbsp;device&nbsp;handle<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_node_t&nbsp;&nbsp;&nbsp;&nbsp;*root;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Root&nbsp;dir&nbsp;node<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*bcache_mem;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Block&nbsp;cache&nbsp;memory&nbsp;base<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_blib_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blib;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Block&nbsp;cache&nbsp;and&nbsp;access&nbsp;library&nbsp;instance<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_node_t&nbsp;&nbsp;node_pool_base[FATFS_NODE_POOL_SIZE];&nbsp;//&nbsp;Node&nbsp;pool&nbsp;base&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_node_t&nbsp;*node_pool[FATFS_NODE_POOL_SIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Node&nbsp;pool&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint32&nbsp;&nbsp;&nbsp;&nbsp;node_pool_free_cnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Node&nbsp;pool&nbsp;free&nbsp;cnt<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_node_list_t&nbsp;&nbsp;live_nlist;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;List&nbsp;of&nbsp;nodes&nbsp;with&nbsp;refcnt&nbsp;&gt&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_node_list_t&nbsp;&nbsp;dead_nlist;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;List&nbsp;of&nbsp;nodes&nbsp;with&nbsp;refcnt&nbsp;==&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;fatfs_hash_table_t&nbsp;node_hash;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Hash&nbsp;of&nbsp;nodes&nbsp;in&nbsp;live&nbsp;and&nbsp;dead&nbsp;lists<br />}&nbsp;fatfs_disk_t;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;上面论述的是FAT文件系统最重要的几个内部结构体,原始的FAT结构在相关标准参考里有详细描述,这里不再赘述。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;----------------<br />&nbsp;&nbsp;&nbsp;&nbsp;UNIX文件系统接口<br />&nbsp;&nbsp;&nbsp;&nbsp;----------------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;上面提供了FAT文件系统的数据结构,下面提供操作这些数据结构的接口函数,它们都符合UNIX标准。<br /><br />//&nbsp;文件系统操作Filesystem&nbsp;operations<br />static&nbsp;int&nbsp;fatfs_mount&nbsp;&nbsp;(cyg_fstab_entry&nbsp;*fste,&nbsp;cyg_mtab_entry&nbsp;*mte);<br />static&nbsp;int&nbsp;fatfs_umount&nbsp;(cyg_mtab_entry&nbsp;*mte);<br />static&nbsp;int&nbsp;fatfs_open&nbsp;&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;int&nbsp;mode,&nbsp;cyg_file&nbsp;*fte);<br />static&nbsp;int&nbsp;fatfs_unlink&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name);<br />static&nbsp;int&nbsp;fatfs_mkdir&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name);<br />static&nbsp;int&nbsp;fatfs_rmdir&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name);<br />static&nbsp;int&nbsp;fatfs_rename&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir1,&nbsp;const&nbsp;char&nbsp;*name1,&nbsp;cyg_dir&nbsp;dir2,&nbsp;const&nbsp;char&nbsp;*name2&nbsp;);<br />static&nbsp;int&nbsp;fatfs_link&nbsp;&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir1,&nbsp;const&nbsp;char&nbsp;*name1,&nbsp;cyg_dir&nbsp;dir2,&nbsp;const&nbsp;char&nbsp;*name2,&nbsp;int&nbsp;type);<br />static&nbsp;int&nbsp;fatfs_opendir(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;cyg_file&nbsp;*fte&nbsp;);<br />static&nbsp;int&nbsp;fatfs_chdir&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;cyg_dir&nbsp;*dir_out&nbsp;);<br />static&nbsp;int&nbsp;fatfs_stat&nbsp;&nbsp;&nbsp;(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;struct&nbsp;stat&nbsp;*buf);<br />static&nbsp;int&nbsp;fatfs_getinfo(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;int&nbsp;key,&nbsp;void&nbsp;*buf,&nbsp;int&nbsp;len&nbsp;);<br />static&nbsp;int&nbsp;fatfs_setinfo(cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;int&nbsp;key,&nbsp;void&nbsp;*buf,&nbsp;int&nbsp;len&nbsp;);<br /><br />//&nbsp;文件操作File&nbsp;operations<br />static&nbsp;int&nbsp;fatfs_fo_read&nbsp;&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;CYG_UIO_TAG&nbsp;*uio);<br />static&nbsp;int&nbsp;fatfs_fo_write&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;CYG_UIO_TAG&nbsp;*uio);<br />static&nbsp;int&nbsp;fatfs_fo_lseek&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;off_t&nbsp;*pos,&nbsp;int&nbsp;whence&nbsp;);<br />static&nbsp;int&nbsp;fatfs_fo_ioctl&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;CYG_ADDRWORD&nbsp;com,&nbsp;CYG_ADDRWORD&nbsp;data);<br />static&nbsp;int&nbsp;fatfs_fo_fsync&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;int&nbsp;mode&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />static&nbsp;int&nbsp;fatfs_fo_close&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp);<br />static&nbsp;int&nbsp;fatfs_fo_fstat&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;stat&nbsp;*buf&nbsp;);<br />static&nbsp;int&nbsp;fatfs_fo_getinfo(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;int&nbsp;key,&nbsp;void&nbsp;*buf,&nbsp;int&nbsp;len&nbsp;);<br />static&nbsp;int&nbsp;fatfs_fo_setinfo(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;int&nbsp;key,&nbsp;void&nbsp;*buf,&nbsp;int&nbsp;len&nbsp;);<br /><br />//&nbsp;目录操作Directory&nbsp;operations<br />static&nbsp;int&nbsp;fatfs_fo_dirread&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;CYG_UIO_TAG&nbsp;*uio);<br />static&nbsp;int&nbsp;fatfs_fo_dirlseek(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;off_t&nbsp;*pos,&nbsp;int&nbsp;whence);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;依次完成上面的各个函数就可以实现FAT文件系统。除了这些内容,还需要一些辅助函数,如:UNIX-DOS时间格式转换、FAT簇操作、FAT项类型判断等。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;-------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;UNIX相对DOS文件系统的优势<br />&nbsp;&nbsp;&nbsp;&nbsp;-------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;1、标准的文件系统API接口,Linux里的大量现成源码能很容易地移植到ecos系统中;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、信息隐藏得比较好。挂装操作可以把任何介质上的任何文件系统挂装到任何目录,用户看到的只是统一的目录,不会感觉到介质差异,有利于编程操作。而DOS文件系统要指定驱动器,暴露了底层细节,程序移植性差。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;3、支持多任务并发。DOS是单任务的,独占系统,本质上不支持多任务。UNIX天然支持多用户多任务并发访问。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;--------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;如何使用ecos文件系统<br />&nbsp;&nbsp;&nbsp;&nbsp;--------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;1、挂装<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;文件系统使用前需要挂装操作,即把某介质上的某文件系统挂装到某目录,函数如下所示:<br />&nbsp;&nbsp;&nbsp;&nbsp;mount(设备名,挂装目录,文件系统名),如:<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;挂装RAM文件系统,设备名恒为空,挂装在根目录:<br />&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;mount(&nbsp;&quot;&quot;,&nbsp;&quot;/&quot;,&nbsp;&quot;ramfs&quot;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;挂装FAT文件系统,设备名为/dev/hda/硬盘,挂装在根目录:<br />&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;mount(&nbsp;&quot;/dev/hda/&quot;,&nbsp;&quot;/&quot;,&nbsp;&quot;fatfs&quot;&nbsp;);&nbsp;//hda后一定要加“/”,否则挂不上<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、打开<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;访问任何文件前先按某种属性打开并获得句柄。<br />&nbsp;&nbsp;&nbsp;&nbsp;open(文件名,打开属性)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;以只读方式打开文件filename,返回句柄fd:<br />&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;=&nbsp;open(filename,&nbsp;O_RDONLY);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;3、读写<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;(文件句柄,缓冲区,长度),返回实际读出/写入的数据长度<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;read(fd,&nbsp;buf,&nbsp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;write(fd,&nbsp;buf,&nbsp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;4、关闭<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;关闭文件,导致缓存数据实际写入存储设备。<br />&nbsp;&nbsp;&nbsp;&nbsp;close(文件句柄)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;close(fd);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;5、卸载<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;卸载整个文件系统,导致缓存数据实际写入存储设备。<br />&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;umount(挂装目录);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;umount(&nbsp;&quot;/&quot;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;由上可见,《ecos增值包》文件系统的使用是相当简单容易的,www.armecos.com免费下载提供bin演示程序,有EASYARM2200或者SMARTARM2200开发板并对文件系统感兴趣的网友,可以尝试使用,该演示支持ROMFS/RAMFS/CF/SD/等介质,使用上面介绍的文件系统进行开发。除此之外,《ecos增值包》还提供其他文件系统支持,各种bootloader,多种完整TCP/IP协议栈,USB、GUI、VxWorks等内容,一揽子解决嵌入式开发遇到的各种问题。
armecos 发表于 2009-4-22 18:55 | 显示全部楼层

有虚拟硬盘软件,可以仿真出硬盘,

直接用ultralEDIT查看,这样,调试都是纯软件的。<br /><br />也可以直接在SD卡/CF卡上调试,很方便。<br /><br />CF卡驱动测试报告<br /><br />一张512M的CF卡,格式化成FAT16,创建一个a.txt文件,内容为<br />123<br />abc<br /><br />用winhex软件分析,根目录位于439扇区,a.txt文件位于525扇区,当然启动部分就固定在0扇区。<br />下面是用CF卡驱动读出的识别信息、0扇区数据、439扇区数据、525扇区数据,和winhex的数据对比,完全一致。<br />识别信息是通过设备识别指令0xEC得到的,它的结构就是ide_identify_data_t结构体所描述的那样。<br />0、493、525扇区的内容是通过读扇区指令0x20获得的,boot扇区0可对照书上讲解详细分析;root根目录扇区439目前只有一个目录项,格式见书中相关部分,其他未用到的部分为0;a.txt文件扇区525是文件的实体数据,即“123&lt回车&gtabc”。<br /><br />test&nbsp;by&nbsp;yangyi<br />2007/07/30<br /><br />+<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*******************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CF&nbsp;Card&nbsp;Test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*******************************<br /><br /><br />CF&nbsp;card&nbsp;experiment...<br /><br />IDE&nbsp;Reset!<br /><br />Print&nbsp;IDE&nbsp;information:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Serial&nbsp;:&nbsp;00000006090000000497<br />&nbsp;&nbsp;&nbsp;&nbsp;Firmware&nbsp;rev.&nbsp;:&nbsp;Ver1.27&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Model&nbsp;:&nbsp;CF/512&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;C/H/S&nbsp;:&nbsp;999/16/63<br />&nbsp;&nbsp;&nbsp;&nbsp;LBA&nbsp;sector&nbsp;number:&nbsp;1006992<br />&nbsp;&nbsp;&nbsp;&nbsp;Kind&nbsp;:&nbsp;4<br /><br />info:<br />----------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;8a&nbsp;84&nbsp;e7&nbsp;&nbsp;3&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;10&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;7e&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;3f&nbsp;&nbsp;0&nbsp;&nbsp;f&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;90&nbsp;5d&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;30&nbsp;30&nbsp;30&nbsp;30&nbsp;30&nbsp;30&nbsp;36&nbsp;30&nbsp;39&nbsp;30&nbsp;30&nbsp;30&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;30&nbsp;30&nbsp;30&nbsp;30&nbsp;34&nbsp;30&nbsp;37&nbsp;39&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;4&nbsp;&nbsp;0&nbsp;65&nbsp;56&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;31&nbsp;72&nbsp;32&nbsp;2e&nbsp;20&nbsp;37&nbsp;46&nbsp;43&nbsp;35&nbsp;2f&nbsp;32&nbsp;31&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;3&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;7&nbsp;&nbsp;0&nbsp;e7&nbsp;&nbsp;3&nbsp;10&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;70&nbsp;&nbsp;3f&nbsp;&nbsp;0&nbsp;90&nbsp;5d&nbsp;&nbsp;f&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;1&nbsp;90&nbsp;5d&nbsp;&nbsp;f&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;7&nbsp;&nbsp;4&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;0&nbsp;78&nbsp;&nbsp;0&nbsp;78&nbsp;&nbsp;0&nbsp;78&nbsp;&nbsp;0&nbsp;78&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b0&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;21&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;120&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;130&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;140&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;150&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;160&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;170&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;190&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br /><br />----------------------------------------------------------------<br /><br />0&nbsp;sector&nbsp;info(0&nbsp;sec&nbsp;:&nbsp;boot):<br />----------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;eb&nbsp;3c&nbsp;90&nbsp;4d&nbsp;53&nbsp;44&nbsp;4f&nbsp;53&nbsp;35&nbsp;2e&nbsp;30&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;10&nbsp;&nbsp;1&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;f8&nbsp;f6&nbsp;&nbsp;0&nbsp;3f&nbsp;&nbsp;0&nbsp;ff&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;90&nbsp;5d&nbsp;&nbsp;f&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;29&nbsp;8d&nbsp;3e&nbsp;1a&nbsp;&nbsp;8&nbsp;4e&nbsp;4f&nbsp;20&nbsp;4e&nbsp;41&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;4d&nbsp;45&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;46&nbsp;41&nbsp;54&nbsp;31&nbsp;36&nbsp;20&nbsp;20&nbsp;20&nbsp;33&nbsp;c9&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;8e&nbsp;d1&nbsp;bc&nbsp;f0&nbsp;7b&nbsp;8e&nbsp;d9&nbsp;b8&nbsp;&nbsp;0&nbsp;20&nbsp;8e&nbsp;c0&nbsp;fc&nbsp;bd&nbsp;&nbsp;0&nbsp;7c&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;38&nbsp;4e&nbsp;24&nbsp;7d&nbsp;24&nbsp;8b&nbsp;c1&nbsp;99&nbsp;e8&nbsp;3c&nbsp;&nbsp;1&nbsp;72&nbsp;1c&nbsp;83&nbsp;eb&nbsp;3a&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;66&nbsp;a1&nbsp;1c&nbsp;7c&nbsp;26&nbsp;66&nbsp;3b&nbsp;&nbsp;7&nbsp;26&nbsp;8a&nbsp;57&nbsp;fc&nbsp;75&nbsp;&nbsp;6&nbsp;80&nbsp;ca&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;2&nbsp;88&nbsp;56&nbsp;&nbsp;2&nbsp;80&nbsp;c3&nbsp;10&nbsp;73&nbsp;eb&nbsp;33&nbsp;c9&nbsp;8a&nbsp;46&nbsp;10&nbsp;98&nbsp;f7&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80&nbsp;&nbsp;66&nbsp;16&nbsp;&nbsp;3&nbsp;46&nbsp;1c&nbsp;13&nbsp;56&nbsp;1e&nbsp;&nbsp;3&nbsp;46&nbsp;&nbsp;e&nbsp;13&nbsp;d1&nbsp;8b&nbsp;76&nbsp;11&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90&nbsp;&nbsp;60&nbsp;89&nbsp;46&nbsp;fc&nbsp;89&nbsp;56&nbsp;fe&nbsp;b8&nbsp;20&nbsp;&nbsp;0&nbsp;f7&nbsp;e6&nbsp;8b&nbsp;5e&nbsp;&nbsp;b&nbsp;&nbsp;3&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a0&nbsp;&nbsp;c3&nbsp;48&nbsp;f7&nbsp;f3&nbsp;&nbsp;1&nbsp;46&nbsp;fc&nbsp;11&nbsp;4e&nbsp;fe&nbsp;61&nbsp;bf&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;e8&nbsp;e6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b0&nbsp;&nbsp;&nbsp;0&nbsp;72&nbsp;39&nbsp;26&nbsp;38&nbsp;2d&nbsp;74&nbsp;17&nbsp;60&nbsp;b1&nbsp;&nbsp;b&nbsp;be&nbsp;a1&nbsp;7d&nbsp;f3&nbsp;a6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0&nbsp;&nbsp;61&nbsp;74&nbsp;32&nbsp;4e&nbsp;74&nbsp;&nbsp;9&nbsp;83&nbsp;c7&nbsp;20&nbsp;3b&nbsp;fb&nbsp;72&nbsp;e6&nbsp;eb&nbsp;dc&nbsp;a0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d0&nbsp;&nbsp;fb&nbsp;7d&nbsp;b4&nbsp;7d&nbsp;8b&nbsp;f0&nbsp;ac&nbsp;98&nbsp;40&nbsp;74&nbsp;&nbsp;c&nbsp;48&nbsp;74&nbsp;13&nbsp;b4&nbsp;&nbsp;e&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e0&nbsp;&nbsp;bb&nbsp;&nbsp;7&nbsp;&nbsp;0&nbsp;cd&nbsp;10&nbsp;eb&nbsp;ef&nbsp;a0&nbsp;fd&nbsp;7d&nbsp;eb&nbsp;e6&nbsp;a0&nbsp;fc&nbsp;7d&nbsp;eb&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f0&nbsp;&nbsp;e1&nbsp;cd&nbsp;16&nbsp;cd&nbsp;19&nbsp;26&nbsp;8b&nbsp;55&nbsp;1a&nbsp;52&nbsp;b0&nbsp;&nbsp;1&nbsp;bb&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;e8&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;3b&nbsp;&nbsp;0&nbsp;72&nbsp;e8&nbsp;5b&nbsp;8a&nbsp;56&nbsp;24&nbsp;be&nbsp;&nbsp;b&nbsp;7c&nbsp;8b&nbsp;fc&nbsp;c7&nbsp;46&nbsp;f0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110&nbsp;&nbsp;3d&nbsp;7d&nbsp;c7&nbsp;46&nbsp;f4&nbsp;29&nbsp;7d&nbsp;8c&nbsp;d9&nbsp;89&nbsp;4e&nbsp;f2&nbsp;89&nbsp;4e&nbsp;f6&nbsp;c6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;120&nbsp;&nbsp;&nbsp;6&nbsp;96&nbsp;7d&nbsp;cb&nbsp;ea&nbsp;&nbsp;3&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;20&nbsp;&nbsp;f&nbsp;b6&nbsp;c8&nbsp;66&nbsp;8b&nbsp;46&nbsp;f8&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;130&nbsp;&nbsp;66&nbsp;&nbsp;3&nbsp;46&nbsp;1c&nbsp;66&nbsp;8b&nbsp;d0&nbsp;66&nbsp;c1&nbsp;ea&nbsp;10&nbsp;eb&nbsp;5e&nbsp;&nbsp;f&nbsp;b6&nbsp;c8&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;140&nbsp;&nbsp;4a&nbsp;4a&nbsp;8a&nbsp;46&nbsp;&nbsp;d&nbsp;32&nbsp;e4&nbsp;f7&nbsp;e2&nbsp;&nbsp;3&nbsp;46&nbsp;fc&nbsp;13&nbsp;56&nbsp;fe&nbsp;eb&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;150&nbsp;&nbsp;4a&nbsp;52&nbsp;50&nbsp;&nbsp;6&nbsp;53&nbsp;6a&nbsp;&nbsp;1&nbsp;6a&nbsp;10&nbsp;91&nbsp;8b&nbsp;46&nbsp;18&nbsp;96&nbsp;92&nbsp;33&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;160&nbsp;&nbsp;d2&nbsp;f7&nbsp;f6&nbsp;91&nbsp;f7&nbsp;f6&nbsp;42&nbsp;87&nbsp;ca&nbsp;f7&nbsp;76&nbsp;1a&nbsp;8a&nbsp;f2&nbsp;8a&nbsp;e8&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;170&nbsp;&nbsp;c0&nbsp;cc&nbsp;&nbsp;2&nbsp;&nbsp;a&nbsp;cc&nbsp;b8&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;80&nbsp;7e&nbsp;&nbsp;2&nbsp;&nbsp;e&nbsp;75&nbsp;&nbsp;4&nbsp;b4&nbsp;42&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;8b&nbsp;f4&nbsp;8a&nbsp;56&nbsp;24&nbsp;cd&nbsp;13&nbsp;61&nbsp;61&nbsp;72&nbsp;&nbsp;b&nbsp;40&nbsp;75&nbsp;&nbsp;1&nbsp;42&nbsp;&nbsp;3&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;190&nbsp;&nbsp;5e&nbsp;&nbsp;b&nbsp;49&nbsp;75&nbsp;&nbsp;6&nbsp;f8&nbsp;c3&nbsp;41&nbsp;bb&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;60&nbsp;66&nbsp;6a&nbsp;&nbsp;0&nbsp;eb&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1a0&nbsp;&nbsp;b0&nbsp;4e&nbsp;54&nbsp;4c&nbsp;44&nbsp;52&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;&nbsp;d&nbsp;&nbsp;a&nbsp;4e&nbsp;54&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b0&nbsp;&nbsp;4c&nbsp;44&nbsp;52&nbsp;20&nbsp;69&nbsp;73&nbsp;20&nbsp;6d&nbsp;69&nbsp;73&nbsp;73&nbsp;69&nbsp;6e&nbsp;67&nbsp;ff&nbsp;&nbsp;d&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1c0&nbsp;&nbsp;&nbsp;a&nbsp;44&nbsp;69&nbsp;73&nbsp;6b&nbsp;20&nbsp;65&nbsp;72&nbsp;72&nbsp;6f&nbsp;72&nbsp;ff&nbsp;&nbsp;d&nbsp;&nbsp;a&nbsp;50&nbsp;72&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1d0&nbsp;&nbsp;65&nbsp;73&nbsp;73&nbsp;20&nbsp;61&nbsp;6e&nbsp;79&nbsp;20&nbsp;6b&nbsp;65&nbsp;79&nbsp;20&nbsp;74&nbsp;6f&nbsp;20&nbsp;72&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1e0&nbsp;&nbsp;65&nbsp;73&nbsp;74&nbsp;61&nbsp;72&nbsp;74&nbsp;&nbsp;d&nbsp;&nbsp;a&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;ac&nbsp;bf&nbsp;cc&nbsp;55&nbsp;aa&nbsp;<br /><br />----------------------------------------------------------------<br /><br />0&nbsp;sector&nbsp;info(493&nbsp;sec&nbsp;:&nbsp;root&nbsp;dir):<br />----------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;41&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;20&nbsp;54&nbsp;58&nbsp;54&nbsp;20&nbsp;18&nbsp;2c&nbsp;7a&nbsp;40&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;3e&nbsp;36&nbsp;3e&nbsp;36&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;52&nbsp;40&nbsp;3e&nbsp;36&nbsp;&nbsp;2&nbsp;&nbsp;0&nbsp;&nbsp;8&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;120&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;130&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;140&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;150&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;160&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;170&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;190&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br /><br />----------------------------------------------------------------<br /><br />0&nbsp;sector&nbsp;info(525&nbsp;sec&nbsp;:&nbsp;a.txt):<br />----------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;31&nbsp;32&nbsp;33&nbsp;&nbsp;d&nbsp;&nbsp;a&nbsp;61&nbsp;62&nbsp;63&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;120&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;130&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;140&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;150&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;160&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;170&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;190&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1a0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1b0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1c0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1d0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1e0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1f0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;&nbsp;0&nbsp;<br /><br />----------------------------------------------------------------
alex74 发表于 2009-4-22 19:24 | 显示全部楼层

windows读写U盘及其方便

见例子<br /><br />另外可以用winhex软件直接查看和编辑扇区
alex74 发表于 2009-4-22 19:26 | 显示全部楼层

例子

  <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20094/2009422192429548.rar'>https://bbs.21ic.com/upfiles/img/20094/2009422192429548.rar</a>
mxh0506 发表于 2009-4-22 23:22 | 显示全部楼层

好贴,做个记号

  
 楼主| 古道热肠 发表于 2009-4-23 12:02 | 显示全部楼层

谢谢大家,谢谢网友alex74

尽管DOS或XP不是很完美,但俺觉得PC机是测试和完善文件系统源代码的最佳平台.
mon51 发表于 2009-4-23 20:53 | 显示全部楼层

用VC6.0+WINHEX

WINHEX可以把一个U盘生产一个镜像文件。用VC6.测试时,用<br />/*&nbsp;读取指定扇区数据&nbsp;*/<br />void&nbsp;SD_DiskRead(void&nbsp;*buffer,&nbsp;unsigned&nbsp;int&nbsp;start,&nbsp;unsigned&nbsp;short&nbsp;count){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;+=&nbsp;FatBpbStart;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;绝对扇区换算成逻辑扇区&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;&lt&lt=&nbsp;9;<br />&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;=&nbsp;fopen(&quot;boot.fat16&quot;,&nbsp;&quot;rb+&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;fseek(fp,&nbsp;start,&nbsp;SEEK_SET);<br />&nbsp;&nbsp;&nbsp;&nbsp;fread(buffer,&nbsp;512,&nbsp;count,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><br />}<br /><br /><br />/*&nbsp;写入指定扇区数据&nbsp;*/<br />void&nbsp;SD_DiskWrite(void&nbsp;*buffer,&nbsp;unsigned&nbsp;int&nbsp;start,&nbsp;unsigned&nbsp;short&nbsp;count){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />//&nbsp;&nbsp;&nbsp;&nbsp;buffer=(void(*)())count;<br /><br />//&nbsp;&nbsp;&nbsp;start&nbsp;+=&nbsp;FatBpbStart;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;绝对扇区换算成逻辑扇区&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;&lt&lt=&nbsp;9;<br />&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;=&nbsp;fopen(&quot;boot.fat16&quot;,&nbsp;&quot;rb+&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;fseek(fp,&nbsp;start,&nbsp;SEEK_SET);<br />&nbsp;&nbsp;&nbsp;&nbsp;i=fwrite(buffer,&nbsp;512,&nbsp;count,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><br />}<br />代替SD卡读写,就可以仿真FAT系统了。现在我也在做一个简单的小巧的FAT系统。
vimman 发表于 2009-4-23 23:52 | 显示全部楼层

我也提供一个仿真的思路哈

1.直接用VC生成一个大文件当U盘或者SD卡,我用这个思路仿真过AT45DB161,但是没有做FS;<br />2.Google&nbsp;Android里面有个makesdcard程序,可以生成FAT32的映像,并且可以把文件放进去,也是一个大文件用来模拟SD卡的!
 楼主| 古道热肠 发表于 2009-4-24 10:05 | 显示全部楼层

用大文件模拟SD卡,就是放入文件及查看文件较麻烦

不过如用楼上朋友提到的工具MakeSDCard,那倒是既方便及实用.
mon51 发表于 2009-4-27 22:08 | 显示全部楼层

你看看RTL3.5里面的介绍。

  
单片小菜 发表于 2009-6-3 18:06 | 显示全部楼层

F_MKFS谁调通了?

此问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部