论文部分内容阅读
摘要:针对Flash存储器的特点,设计了一种适合开源实时操作的嵌入式文件系统,首先详细介绍了μC/OS-II内核在ARM7TDMI上的移植过程,其次介绍了基于此上的简易嵌入式文件系统设计方案.最后经测试得出结论:该嵌入式文件系统代码精简,占用系统资源少,执行效率高,有较高的安全性。
关键词:Flash存储器;μC/OS-II;嵌入式文件系统
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-31081-03
The Design of aFacility Embedded File System Based on ARM7TDMI
ZHANG Yan-wei,WEI Yin-ku
(Air Defense Command College of the PLA,Zhengzhou 450052,China)
Abstract:According to the features of flash memory,a embedded file system is presented,which fits for a lot of open source real—time operation system.At first we introduce the naturalization,which based on lot of open source real—time operation system μC/OS-II .and then ,we introduce an facility file system.the last we educe the conclusion from testing:The instrument indicate that the embedded file system is simple,highly dependable and efficient
Key words:Flash memory;μC/OS-II;embedded system
随着电子技术的不断发展,嵌入式计算机系统凭借其特有的功能和资源占用量少的特点,在各个领域得到了越来越多的应用。在越来越多的场合中要求存储器的容量不断的扩大,然而在这种情况下若没有文件系统支持,数据的存储就难以管理,故使用文件系统是嵌入式技术发展的必然趋势。
1 嵌入式操作系统选择
目前流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式操作系统,如微软公司的Windows CE及其新版本,SUN 公司的Java操作系统,朗讯科技公司的Inferno,嵌入式Linux等。这类系统经过个人电脑或高性能计算机等产品的长期运行考验,技术日趋成熟,其相关的标准和软件开发方式已被用户普遍接受,同时积累了丰富的开发工具和应用软件资源。另一类是实时操作系统,如WindRiver 公司的VxWorks,ISI的pSOS,QNX系统软件公司的QNX,ATI的Nucleus,μC/OS-II,中国科学院凯思集团的Hopen 嵌入式操作系统等,这类产品在操作系统的结构和实现上都针对所面向的应用领域,对实时性高可靠性等进行了精巧的设计,而且提供了独立而完备的系统开发和测试工具,较多地应用在军用产品和工业控制等领域中。这些种类繁多的操作系统中,μC/OS-II和μcLinux为公开源代码操作系统,目前得到了较多的认可,但相对于μcLinux系统,μC/OS-II具有体积小、高实时性的特点,因此设计使用时选择了嵌入实时操作系统μC/OS-II。
2 μC/OS-II的移植
2.1移植μC/OS-II的综合考虑
μC/OS-II是一个通用的嵌入式实时操作系统,具有很好的可移植性。大部分μC/OS-II的代码是用C语言编写的,但是仍有一部分代码是与处理器相关的。系统移植需要考虑CPU细节以及所用编译环境,虽然有各种成功移植的范例,但在LPC2210处理器上移植的范例并不多见。本人在借鉴他人移植代码基础上,实现了μC/OS-II在本次应用硬件系统上的移植。本节介绍使用ADS1.2编译器,把μC/OS-II 2.52移植到LPC2210处理器为CPU的具体实现。
然而任何操作系统的移植都有相当一部分工作是和所用处理器的体系结构密切相关的,因此在做具体的移植工作之前,需要先了解该处理器的体系结构在移植过程中要注意的特性。
(1)处理器模式:LPC2210是一款ARM7TDMI核的微处理器,同所有ARM7TDMI核芯片一样,该处理器工作在7种模式下,其中管理、终止、未定义、中断和快速中断模式都和相应的异常对应,能作为任务使用的模式只有系统态和用户态,比较这两种模式,区别在于系统态可使用特权指,但ARM7TDMI处理器没有存储管理器件MMU,所有代码运行在同一存储空间,各任务堆栈之间并没有保护隔离机制,这样并不能给多任务带来保护,同时系统模式可直接操作程序状态寄存器,这能给开关中断带来方便,权衡利弊,系统任务工作模式选择系统态。
(2)程序状态寄存器:程序状态寄存器CPSR(Current Program Status Register),它的[0--4]位用来表示CPU Mode,每一种处理器异常模式,都有一个对应的SPSR(Saved Program Status Register)寄存器,用来保存进入异常模式前的CPSR。SPSR的作用就是当CPU从异常模式退出时,通过一条简单的汇编指令就能够恢复进入异常模式前的CPSR,该值保存在当前异常模式的SPSR中。非异常模式的 usr和sys模式下没有 SPSR,只有 CPSR。不能显式地指定把 CPSR 保存到某个异常模式下的 SPSR,而必须是变更到该异常模式后由CPU自动完成,不能硬性赋值,因为该模式下SPSR在其他模式下不可见。需要注意的是程序状态寄存器只能在特权模式下修改,通常调用SWI软件中断指令,切换到管理模式后进行修改。
(3)软件中断:软件中断由执行SWI指令产生。在其他模式中调用SWI指令,可使CPU工作模式切换到管理模式,可用于用户模式下的程序调用特权操作指令,可使用该机制实现开关中断等系统功能调用。
(4)上下文切换:ARM处理器执行的CPU上下文,涉及共37个寄存器,其中31个是通用寄存器,包括一个程序计数器PC,另外6个分别是CPSR和五种异常模式程序状态保存寄存器。
(5)堆栈生长方向:μC/OS-II使用结构常量OS_STK_GROWTH
定义堆栈增长方向,这一常量允许两种方向,分别是向上和向下增长,虽然ARM支持了两种方式,但ADS1.2编译器只支持满递减的堆栈方式。
2.2 μC/OS-II系统文件结构
在移植过程中把整个系统代码分为三大部分(共15个文件):一是μC/OS-II核心代码部分,包括10个C程序文件和1个头文件,主要实现了系统调用、任务管理、内存管理、任务间通信等系统功能,这部分代码与处理器无关,在移植过程中无须处理;二是应用程序配置相关部分,包括系统配置相关的两个头文件,对其中相关C语言定义开关的使能或禁能可实现系统的剪裁;三是处理器相关代码部分,包括三个文件,系统移植代码集中在这里。μC/OS-II系统文件结构如图1。
图1 μC/OS-II系统文件结构
2.3移植μC/OS-II
2.3.1 OS_CPU.H的移植
该文件涉及处理器和编译器相关的数据类型定义以及处理器相关的宏定义。根据ADS1.2编译器特性,可以定义数据类型BOOLEAN、INT8U、INT8S等,定义代码见程序清单略。
与处理器相关的宏主要是进入临界区的OS_ENTER_CRITICAL和退出临界区的OS_EXIT_CRITICAL,这里开关中断方式采用方式2,两个开关宏定义为直接操作CPSR寄存器。另外定义OS_TASK_SW()和_OSStartHighRdy()为软件中断函数来为系统提供底层驱动。用软中断作为操作系统的底层接口就需要在C语言中使用SWI指令。在ADS中,有一个关键字__swi,用它声明一个不存在的函数,则调用这个函数救灾调用这个函数的地方插入一条SWI指令,并且可以指定功能号,同时,这个函数也可以由参数和返回值,其传递规则与一般函数一样。相关宏定义见程序清单略。
2.3.2 OS_CPU_C.C的移植
按μC/OS-II要求在OS_CPU_C.C中,需要编写10个C函数,其中9个为钩子函数,在移植过程中简单地把这几个函数处理为空函数了,主要的移植工作在OSTaskStkInit()函数上。分析该函数功能为初始化任务的栈结构,并使所有的寄存器都保存在堆栈中。实现过程中,注意SPSR初始为系统模式并使能中断,具体实现见代码清单略
2.3.3OS_CPU_A.S的移植
在OS_CPU_A.S中,编写3个汇编语言函数,OS_TASK_SW(),__OSStartHighRdy()和OSTICKISR(),并编写了软件中断服务程序。在调用软中断之后,处理器切换到ARM指令和管理模式下工作。在执行软件中断服务函数之前,要提取中断号,这些通过软件中断服务程序完成,具体实现见代码清单略。
任务切换发生在当前任务调用OS_TASK_SW函数主动交出CPU控制权和发生中断时调用OSIntCtxSw函数时,虽然这两个函数执行的条件不同,但是它们的功能相同,实现中让这两个函数公用了一个任务切换代码,其中OS_TASK_SW是通过软件中断0完成的,具体实现见代码清单略。
系统多任务环境由函数OSStart()启动,用户在调用该函数之前,必须已经建立了一个或更多任务。OSStart()最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务,而它最终是调用__OSStartHighRdy实现的,其代码见程序清单略。
函数OSTickISR为系统时钟节拍中断函数,这需要使用处理器的定时器和定时中断,为达到集中地初始化硬件的目的,此函数放在了启动代码文件中,实现见程序清单略。
3 简易文件系统设计
3.1文件系统设计方案
用以存储文件数据的设备就是文件系统设备,文件系统设备向文件系统提供数据的物理存储服务。文件系统通过设备驱动程序对文件系统设备进行操作。本设计选择NandFlash存储器作为存储文件数据的设备,U盘就是USB接口大容量FLASH存储盘,它是一种新型移动存储设备,以体积小、速度高、抗震动、通用性强的特点倍受青睐。
通过设计U盘读写协议栈,微处理器已经能够对U盘的某一特定扇区读写。为了让系统写入U盘的数据直接被Windows系统所识别,还需要设计一个符合FAT格式的文件系统。为此我们再来分析需求:一是符合FAT文件系统格式;二是实现数据输入,数据结构不大于80字节;三是能对需要存储数据进行保存。根据对实际需求的分析,基于面向应用,满足应用要求的思路,最后确定文件系统方案为:在Windows NT系统环境下格式化U盘,同时建立一个名为“Hanglu.dat”的文件,通过该文件在嵌入式系统与PC机的Window系统交互,该文件格式固定为数据结构数组文件。根据以上方案,实际研究过程中我设计了一个较为简易的文件系统,该文件系统格式与FAT兼容,实现了嵌入式终端写入的文件能够被Windows系统直接作为文件读写,同时Windows系统上对文件写入的数据也能被嵌入式终端识别。之所以说是一个简易的文件系统,是因为该系统是高度面向本次应用的,而没有提供通用接口,它只默认对一个固定文件名为“Hanglu.dat”的文件进行读写操作,没有实现文件创建及删除功能,不能对文件名进行修改,也不能对通用文件进行操作。
3.2文件系统初始化
文件系统初始化是该系统的核心所在,文件操作的准备工作都在该过程中完成。系统初始化首先获取U盘信息,然后通过比对查询的方法在FDT目录表中查找“Hanglu.txt”目录项,根据目录项中“首簇”值再到FAT区追踪簇链到最后一个,然后根据该值在这一簇中查找EOF所在扇区,并把该扇区数据读到系统RAM中以备读写文件的需要。该过程中比较有特色的是,构建了一个扇区指针数据结构,该数据结构的三个指针成员分别指向“Hanglu.txt”文件末簇指针在文件分配表中、目录项在目录分配表以及EOF的扇区号,这就为后面的文件操作提供了极大的方便。图2为文件系统初始化流程图。
图2 文件系统初始化流程图
获取U盘信息主要包括U盘每扇区字节数、每簇扇区数、FAT开始扇区号、FAT表个数、根目录占扇区数、逻辑盘(卷)总共扇区数、FAT表占用扇区数、根目录开始扇区号以及数据区开始扇区号等数据。U盘在格式化后,把这些信息保存在U盘引导区中,读取U盘引导区可获得以上所列的大部分数据,还有些数据通过计算就可获得。获取U盘信息程序见清单略。
3.3文件读写
系统经初始化后,数据文件的最后一部分数据以读到了系统RAM中,读输入的数据只需要分析出该数据即可。在此不再过多描述。
追加方式写“Hanglu.dat”文件首先判断数据是否小于初始化获取的EOF指针所指簇空间,因为FAT文件系统规定文件存储的最小单位为簇,所以在当前簇空间不足时,需要先遍历文件分配区分配一个空闲的簇空间,并把剩余的数据写入其中。
4 结论
本设计是根据具体需求和项目指标对源代码开放的实时嵌入式操作系统 μC/OS-II进行了有针对性的移植,并在上基础上提出了适合本设计要求的镜文件系统。经实验测试该文件系统运行良好,性能稳定,可靠性强。下一步的工作扩充设备驱动程序库,使之支持更多各式各样的外部设备。
参考文献:
[1]ARM 公司.ARM7TDMI-S Reference Book[M].
[2]Philip公司.UM_LPC2114_2124_2212_2214_2 Datasheet[M].
[3]Andrew N Sloss.ARM嵌入式系统开发—软件设计与优化[M].北京:航空航天大学出版社,2005.
[4]Wayne Wolf.嵌入式计算系统设计原理[M].北京:机械工业出版社,2002.
[5]张宁.等.基于MSP430和CF卡的FAT16文件系统设计[J].长春理工大学学报,第29卷第1期.
[6]刘忆辉.MM36SB020中一个类FAT16文件系统实现[J].2005年全国单片机与嵌入式系统学术交流会论文集.
[7]Jean JLabrosse.著.邵贝贝.等译.嵌入式实时操作系统uC/OS-II(第2版)[M].北京航空航天大学出版社,2005.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”
关键词:Flash存储器;μC/OS-II;嵌入式文件系统
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)16-31081-03
The Design of aFacility Embedded File System Based on ARM7TDMI
ZHANG Yan-wei,WEI Yin-ku
(Air Defense Command College of the PLA,Zhengzhou 450052,China)
Abstract:According to the features of flash memory,a embedded file system is presented,which fits for a lot of open source real—time operation system.At first we introduce the naturalization,which based on lot of open source real—time operation system μC/OS-II .and then ,we introduce an facility file system.the last we educe the conclusion from testing:The instrument indicate that the embedded file system is simple,highly dependable and efficient
Key words:Flash memory;μC/OS-II;embedded system
随着电子技术的不断发展,嵌入式计算机系统凭借其特有的功能和资源占用量少的特点,在各个领域得到了越来越多的应用。在越来越多的场合中要求存储器的容量不断的扩大,然而在这种情况下若没有文件系统支持,数据的存储就难以管理,故使用文件系统是嵌入式技术发展的必然趋势。
1 嵌入式操作系统选择
目前流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式操作系统,如微软公司的Windows CE及其新版本,SUN 公司的Java操作系统,朗讯科技公司的Inferno,嵌入式Linux等。这类系统经过个人电脑或高性能计算机等产品的长期运行考验,技术日趋成熟,其相关的标准和软件开发方式已被用户普遍接受,同时积累了丰富的开发工具和应用软件资源。另一类是实时操作系统,如WindRiver 公司的VxWorks,ISI的pSOS,QNX系统软件公司的QNX,ATI的Nucleus,μC/OS-II,中国科学院凯思集团的Hopen 嵌入式操作系统等,这类产品在操作系统的结构和实现上都针对所面向的应用领域,对实时性高可靠性等进行了精巧的设计,而且提供了独立而完备的系统开发和测试工具,较多地应用在军用产品和工业控制等领域中。这些种类繁多的操作系统中,μC/OS-II和μcLinux为公开源代码操作系统,目前得到了较多的认可,但相对于μcLinux系统,μC/OS-II具有体积小、高实时性的特点,因此设计使用时选择了嵌入实时操作系统μC/OS-II。
2 μC/OS-II的移植
2.1移植μC/OS-II的综合考虑
μC/OS-II是一个通用的嵌入式实时操作系统,具有很好的可移植性。大部分μC/OS-II的代码是用C语言编写的,但是仍有一部分代码是与处理器相关的。系统移植需要考虑CPU细节以及所用编译环境,虽然有各种成功移植的范例,但在LPC2210处理器上移植的范例并不多见。本人在借鉴他人移植代码基础上,实现了μC/OS-II在本次应用硬件系统上的移植。本节介绍使用ADS1.2编译器,把μC/OS-II 2.52移植到LPC2210处理器为CPU的具体实现。
然而任何操作系统的移植都有相当一部分工作是和所用处理器的体系结构密切相关的,因此在做具体的移植工作之前,需要先了解该处理器的体系结构在移植过程中要注意的特性。
(1)处理器模式:LPC2210是一款ARM7TDMI核的微处理器,同所有ARM7TDMI核芯片一样,该处理器工作在7种模式下,其中管理、终止、未定义、中断和快速中断模式都和相应的异常对应,能作为任务使用的模式只有系统态和用户态,比较这两种模式,区别在于系统态可使用特权指,但ARM7TDMI处理器没有存储管理器件MMU,所有代码运行在同一存储空间,各任务堆栈之间并没有保护隔离机制,这样并不能给多任务带来保护,同时系统模式可直接操作程序状态寄存器,这能给开关中断带来方便,权衡利弊,系统任务工作模式选择系统态。
(2)程序状态寄存器:程序状态寄存器CPSR(Current Program Status Register),它的[0--4]位用来表示CPU Mode,每一种处理器异常模式,都有一个对应的SPSR(Saved Program Status Register)寄存器,用来保存进入异常模式前的CPSR。SPSR的作用就是当CPU从异常模式退出时,通过一条简单的汇编指令就能够恢复进入异常模式前的CPSR,该值保存在当前异常模式的SPSR中。非异常模式的 usr和sys模式下没有 SPSR,只有 CPSR。不能显式地指定把 CPSR 保存到某个异常模式下的 SPSR,而必须是变更到该异常模式后由CPU自动完成,不能硬性赋值,因为该模式下SPSR在其他模式下不可见。需要注意的是程序状态寄存器只能在特权模式下修改,通常调用SWI软件中断指令,切换到管理模式后进行修改。
(3)软件中断:软件中断由执行SWI指令产生。在其他模式中调用SWI指令,可使CPU工作模式切换到管理模式,可用于用户模式下的程序调用特权操作指令,可使用该机制实现开关中断等系统功能调用。
(4)上下文切换:ARM处理器执行的CPU上下文,涉及共37个寄存器,其中31个是通用寄存器,包括一个程序计数器PC,另外6个分别是CPSR和五种异常模式程序状态保存寄存器。
(5)堆栈生长方向:μC/OS-II使用结构常量OS_STK_GROWTH
定义堆栈增长方向,这一常量允许两种方向,分别是向上和向下增长,虽然ARM支持了两种方式,但ADS1.2编译器只支持满递减的堆栈方式。
2.2 μC/OS-II系统文件结构
在移植过程中把整个系统代码分为三大部分(共15个文件):一是μC/OS-II核心代码部分,包括10个C程序文件和1个头文件,主要实现了系统调用、任务管理、内存管理、任务间通信等系统功能,这部分代码与处理器无关,在移植过程中无须处理;二是应用程序配置相关部分,包括系统配置相关的两个头文件,对其中相关C语言定义开关的使能或禁能可实现系统的剪裁;三是处理器相关代码部分,包括三个文件,系统移植代码集中在这里。μC/OS-II系统文件结构如图1。
图1 μC/OS-II系统文件结构
2.3移植μC/OS-II
2.3.1 OS_CPU.H的移植
该文件涉及处理器和编译器相关的数据类型定义以及处理器相关的宏定义。根据ADS1.2编译器特性,可以定义数据类型BOOLEAN、INT8U、INT8S等,定义代码见程序清单略。
与处理器相关的宏主要是进入临界区的OS_ENTER_CRITICAL和退出临界区的OS_EXIT_CRITICAL,这里开关中断方式采用方式2,两个开关宏定义为直接操作CPSR寄存器。另外定义OS_TASK_SW()和_OSStartHighRdy()为软件中断函数来为系统提供底层驱动。用软中断作为操作系统的底层接口就需要在C语言中使用SWI指令。在ADS中,有一个关键字__swi,用它声明一个不存在的函数,则调用这个函数救灾调用这个函数的地方插入一条SWI指令,并且可以指定功能号,同时,这个函数也可以由参数和返回值,其传递规则与一般函数一样。相关宏定义见程序清单略。
2.3.2 OS_CPU_C.C的移植
按μC/OS-II要求在OS_CPU_C.C中,需要编写10个C函数,其中9个为钩子函数,在移植过程中简单地把这几个函数处理为空函数了,主要的移植工作在OSTaskStkInit()函数上。分析该函数功能为初始化任务的栈结构,并使所有的寄存器都保存在堆栈中。实现过程中,注意SPSR初始为系统模式并使能中断,具体实现见代码清单略
2.3.3OS_CPU_A.S的移植
在OS_CPU_A.S中,编写3个汇编语言函数,OS_TASK_SW(),__OSStartHighRdy()和OSTICKISR(),并编写了软件中断服务程序。在调用软中断之后,处理器切换到ARM指令和管理模式下工作。在执行软件中断服务函数之前,要提取中断号,这些通过软件中断服务程序完成,具体实现见代码清单略。
任务切换发生在当前任务调用OS_TASK_SW函数主动交出CPU控制权和发生中断时调用OSIntCtxSw函数时,虽然这两个函数执行的条件不同,但是它们的功能相同,实现中让这两个函数公用了一个任务切换代码,其中OS_TASK_SW是通过软件中断0完成的,具体实现见代码清单略。
系统多任务环境由函数OSStart()启动,用户在调用该函数之前,必须已经建立了一个或更多任务。OSStart()最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务,而它最终是调用__OSStartHighRdy实现的,其代码见程序清单略。
函数OSTickISR为系统时钟节拍中断函数,这需要使用处理器的定时器和定时中断,为达到集中地初始化硬件的目的,此函数放在了启动代码文件中,实现见程序清单略。
3 简易文件系统设计
3.1文件系统设计方案
用以存储文件数据的设备就是文件系统设备,文件系统设备向文件系统提供数据的物理存储服务。文件系统通过设备驱动程序对文件系统设备进行操作。本设计选择NandFlash存储器作为存储文件数据的设备,U盘就是USB接口大容量FLASH存储盘,它是一种新型移动存储设备,以体积小、速度高、抗震动、通用性强的特点倍受青睐。
通过设计U盘读写协议栈,微处理器已经能够对U盘的某一特定扇区读写。为了让系统写入U盘的数据直接被Windows系统所识别,还需要设计一个符合FAT格式的文件系统。为此我们再来分析需求:一是符合FAT文件系统格式;二是实现数据输入,数据结构不大于80字节;三是能对需要存储数据进行保存。根据对实际需求的分析,基于面向应用,满足应用要求的思路,最后确定文件系统方案为:在Windows NT系统环境下格式化U盘,同时建立一个名为“Hanglu.dat”的文件,通过该文件在嵌入式系统与PC机的Window系统交互,该文件格式固定为数据结构数组文件。根据以上方案,实际研究过程中我设计了一个较为简易的文件系统,该文件系统格式与FAT兼容,实现了嵌入式终端写入的文件能够被Windows系统直接作为文件读写,同时Windows系统上对文件写入的数据也能被嵌入式终端识别。之所以说是一个简易的文件系统,是因为该系统是高度面向本次应用的,而没有提供通用接口,它只默认对一个固定文件名为“Hanglu.dat”的文件进行读写操作,没有实现文件创建及删除功能,不能对文件名进行修改,也不能对通用文件进行操作。
3.2文件系统初始化
文件系统初始化是该系统的核心所在,文件操作的准备工作都在该过程中完成。系统初始化首先获取U盘信息,然后通过比对查询的方法在FDT目录表中查找“Hanglu.txt”目录项,根据目录项中“首簇”值再到FAT区追踪簇链到最后一个,然后根据该值在这一簇中查找EOF所在扇区,并把该扇区数据读到系统RAM中以备读写文件的需要。该过程中比较有特色的是,构建了一个扇区指针数据结构,该数据结构的三个指针成员分别指向“Hanglu.txt”文件末簇指针在文件分配表中、目录项在目录分配表以及EOF的扇区号,这就为后面的文件操作提供了极大的方便。图2为文件系统初始化流程图。
图2 文件系统初始化流程图
获取U盘信息主要包括U盘每扇区字节数、每簇扇区数、FAT开始扇区号、FAT表个数、根目录占扇区数、逻辑盘(卷)总共扇区数、FAT表占用扇区数、根目录开始扇区号以及数据区开始扇区号等数据。U盘在格式化后,把这些信息保存在U盘引导区中,读取U盘引导区可获得以上所列的大部分数据,还有些数据通过计算就可获得。获取U盘信息程序见清单略。
3.3文件读写
系统经初始化后,数据文件的最后一部分数据以读到了系统RAM中,读输入的数据只需要分析出该数据即可。在此不再过多描述。
追加方式写“Hanglu.dat”文件首先判断数据是否小于初始化获取的EOF指针所指簇空间,因为FAT文件系统规定文件存储的最小单位为簇,所以在当前簇空间不足时,需要先遍历文件分配区分配一个空闲的簇空间,并把剩余的数据写入其中。
4 结论
本设计是根据具体需求和项目指标对源代码开放的实时嵌入式操作系统 μC/OS-II进行了有针对性的移植,并在上基础上提出了适合本设计要求的镜文件系统。经实验测试该文件系统运行良好,性能稳定,可靠性强。下一步的工作扩充设备驱动程序库,使之支持更多各式各样的外部设备。
参考文献:
[1]ARM 公司.ARM7TDMI-S Reference Book[M].
[2]Philip公司.UM_LPC2114_2124_2212_2214_2 Datasheet[M].
[3]Andrew N Sloss.ARM嵌入式系统开发—软件设计与优化[M].北京:航空航天大学出版社,2005.
[4]Wayne Wolf.嵌入式计算系统设计原理[M].北京:机械工业出版社,2002.
[5]张宁.等.基于MSP430和CF卡的FAT16文件系统设计[J].长春理工大学学报,第29卷第1期.
[6]刘忆辉.MM36SB020中一个类FAT16文件系统实现[J].2005年全国单片机与嵌入式系统学术交流会论文集.
[7]Jean JLabrosse.著.邵贝贝.等译.嵌入式实时操作系统uC/OS-II(第2版)[M].北京航空航天大学出版社,2005.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”