- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统设计与开发 μC/OS-II的文件系统 μC/OS-II的文件系统1.1 Flash盘文件系统实现原理1.2 Flash盘文件系统的实现过程 文件系统,是操作系统用以组织、存储和命名文件的结构。磁盘或分区与它所包括的文件系统的不同是很重要的,大部分应用程序都基于文件系统进行操作,而在不同种类的文件系统上它们是不能工作的。常用的文件系统有很多,如FAT16文件系统、FAT32文件系统和NTFS文件系统等。然而,μC/OS-II本身不提供文件系统。这给某些高级应用带来极大不便,针对嵌入式应用,参考FAT格式,本节以如何在Flash盘上建立文件系统为例,介绍嵌入式文件系统的构建。 1.1 Flash盘文件系统实现原理 Flash硬盘与普通的磁头、柱面式介质不一样。在嵌入式系统开发中,经常使用Flash作为存储介质,有其特定的结构特点。 Flash的读写特点: 必须以Page为单位进行读写。写之前必须先擦除原有内容。擦除操作必须对Block(块)进行,即一次至少擦除一个Block内容。 FAT是按簇来分配空间的,但其给出的地址为LBA(logical block address),即一个扇区号。使用时,需要将LBA转换为物理地址,这样才可以对数据进行存取操作。实际上,定义每个簇为32个扇区是最好的,因为这样物理结构和逻辑结构刚好一致。 Flash作为U盘使用时,当Host发出Read命令后,Flash读写操作即开始,Host首先读取Flash盘中一个名为MBR的扇区,如果读取正确将得到有关存储介质的相关信息,如扇区长度、每簇扇区数以及总扇区数等,以便知道此盘的大小,接着读取文件分配表,从而在PC机的可移动盘符中显示文件目录,并可以进行复制、删除或创建文件操作。系统自动将这些命令转换成Read或Write,通过USB的Read或Write命令块描述符从Flash中相应扇区读取数据,或将特定长度的数据写入Flash相应簇中。1.2 Flash盘文件系统的实现过程 如果要在μC/OS-II系统中使用文件系统,首先必须初始化操作系统的文件系统,为操作系统的文件缓冲区分配存储空间。下面给出了初始函数代码: INT8U err; pFileMem=OSMemCreate(FileMemPart10,sizeof(FILE ),ERR); if(pFileMem==NULL) { Uart_printf(“Failde to Create File”); LCD_printf(“Failed to Create File”); } 上述代码中通过OSMemCreate为操作系统分配10个文件缓冲区。其中,FILE是一个文件的相关结构体,它的定义如下: typedef struct { INT8U Buffer[BLOCK_SIZE];//文件缓冲区 INT32U fileblock://文件当前的簇位置 INT32U fiIemode; //打开文件的模式 INT32U filebufnum; //文件缓冲区中已经读取/写入的字节数 INT32U fileCurpos://读写的当前位置 INT32U filesize://文件的大小 }FILE; 可见,在FILE结构中包括了文件的缓冲区和其他相关信息。因为在大容量电子盘Flash存储器中,数据是按照整块存储的。所以,在文件缓冲区中,以一个块大小为单位,来开辟文件缓冲区,以便于管理。因为Flash存储器的特性,数据只能被整块地改写(Flash的擦除必须以块为单位)。本系统中使用的Flash存储器的一个块的大小是16KB。 文件系统初始化后,下一步就是如何打开文件、读取文件和修改文件。文件的打开与在Windowns下文件打开一样,调用文件打开函数、输入文件路径和文件的打开方式(只读、只写和读写方式),调用文件打开函数时,将会创建FILE结构,并为文件读取分配缓冲区。读取文件的时候,直接读取文件缓冲区中的数据,如果文件缓冲区中的数据为空则访问文件分配表,读取下一个簇的数据到文件缓冲区中。与文件读出过程相反,文件写入的过程是先把数据写入文件的缓冲区,当缓冲区满(达到了一个簇的大小)的时候,则自动把数据写入Flash盘。需要特别注意的是,在完成文件操作后必须关闭文件,释放文件缓冲区。 在进行文件操作时可以将实现函数封装,例如文件系统初始化函数initOSFile()、文件打开函数OpenOSFile(char filename[],U32 openmode)、读文件函数ReadOSFile(FILE pfile,U8*readbuffer,U32readbyte)、写文件函数WriteOSFile(FILE *Pfile,U8*writebuf
原创力文档


文档评论(0)