嵌入式操作系统实验报告

上传人:一** 文档编号:55773093 上传时间:2022-02-18 格式:DOCX 页数:27 大小:31.37KB
返回 下载 相关 举报
嵌入式操作系统实验报告_第1页
第1页 / 共27页
嵌入式操作系统实验报告_第2页
第2页 / 共27页
嵌入式操作系统实验报告_第3页
第3页 / 共27页
点击查看更多>>
资源描述
本文格式为Word版,下载可任意编辑嵌入式操作系统实验报告 高校信息科学与工程学院 试验报告 姓名: 安磊 班级: 计科 0901 学号: 0909090310 指导老师: 宋虹 名目 课程设计内容 - 3 3 uC/OS 操作系统简介 - 3 3 S uC/OS 操作系统的组成 - - 3 3 S uC/OS 操作系统功能作用 - 4 4 S uC/OS 文件系统的建立 - 6 6 文件系统设计的原则 - - 6 6 文件系统的层次结构和功能模块 - - 6 6 文件系统的具体设计 - - 8 8 文件系统核心代码 - 9 9 课程设计感想 - 11 附录 - 12 课程设计 内容 在 uC/OS 操作系统中增加一个简洁的文件系统。 要求如下: (1) 熟识并分析 uc/os 操作系统 (2) 设计并实现一个简洁的文件系统 (3) 可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4) 编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要叙述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系非常亲密。 本课程设计的目的综合应用同学所学学问,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,把握操作系统开发的基本技能。 I I S uC/OS 操作系统简介 C/OS-II 是一种可移植的,可植入 ROM 的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微掌握器和数字信号处理器。 C/OS 和 C/OS-II 是特地为计算机的嵌入式应用设计的, 绝大部分代码是用 C 语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约 200 行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的 CPU 上。用户只要有标准的 ANSI 的 C 交叉编译器,有汇编器、连接器等软件工具,就可以将 C/OS-II 嵌入到开发的产品中。C/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。C/OS-II 已经移植到了几乎全部知名的 CPU 上。 严格地说 uC/OS-II 只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有供应输入输出管理,文件系统,网络等额外的服务。但由于 uC/OS-II 良好的可扩展性和源码开放,这些非必需的功能完全可以由用户自己依据需要分别实现。 uC/OS-II 目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上供应最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 S uC/OS 操作系统的组成 C/OS-II 可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU 的移植等 5个部分。如下图: 每个部分详细作用 1) 核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、大事处理等多部分。能够维持系统基本工作的部分都在这里。 2) 任务处理部分(OSTask.c) 任务处理部分中的内容都是与任务的操作亲密相关的。包括任务的建立、删除、挂起、恢复等等。由于 C/OS-II 是以任务为基本单位调度的,所以这部分内容也相当重要。 3) 时钟部分(OSTime.c) C/OS-II 中的最小时钟单位是 timetick(时钟节拍)。任务延时等操作是在这里完成的。 4) 任务同步和通信部分 为大事处理部分,包括信号量、邮箱、邮箱队列、大事标志等部分;主要用于任务间的相互联系和对临界资源的访问。 5) 与 CPU 的接口部分 是指 C/OS-II 针对所使用的 CPU 的移植部分。由于 C/OS-II 是一个通用性的操作系统,所以对于关键问题上的实现,还是需要依据详细 CPU 的详细内容和要求作相应的移植。这部分内容由于牵涉到 SP 等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。 S uC/OS 操作系统功能作用 任务管理 uC/OS-II 中最多可以支持 64 个任务,分别对应优先级 063,其中 0 为最高优先级。63 为最低级,系统保留了 4 个最高优先级的任务和 4 个最低优先级的任务,全部用户可以使用的任务数有 56 个。 uC/OS-II 供应了任务管理的各种函数调用,包括创建任务,删除任务,转变任务的优先级,任务挂起和恢复等。 系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前 cpu的利用率。 时间管理 uC/OS-II 的时间管理是通过定时中断来实现的,该定时中断一般为 10 毫秒或 100 毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。 uC/OS-II 要求用户在定时中断的服务程序中,调用系统供应的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。 内存管理 在 ANSI C 中是使用 malloc 和 free 两个函数来动态安排和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的缘由,malloc 和 free 的执行时间也是不确定。 uC/OS-II 中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存块大小可以不同。用户需要动态安排内存时,系统选择一个适当的分区,按块来安排内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。 任务间通信与同步 对一个多任务的操作系统来说,任务间的通信和同步是必不行少的。uC/OS-II 中供应了4 种同步对象,分别是信号量,邮箱,消息队列和大事。全部这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。 任务调度 uC/OS-II 采纳的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。 uC/os-II 的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务,一旦处于就绪状态,则马上抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uC/OS-II 规定全部任务的优先级不同,由于任务的优先级也同时唯一标志了该任务本身 II S uC/OS 文件系统的建立 uC/OS 操作系统本身是没有自带文件系统的。但可由用户自行设计。 文件系统设计的原则: 1.简洁性 现有的比较完善的文件系统功能齐全、对系统资源要求较高,而我们所需要的这个嵌入式文件系统是嵌入式平台的一个中间件,要求简洁高效牢靠。为此我们在设计过程中借鉴了MS-DOS 的 FAT16 文件系统格式的名目形式进行文件管理,打开文件数据结构则采纳了类似于 UNIX 系统文件表的方式,为每一个打开文件设置了一个数据结构指针 FS_FILE,使得用户接口简洁明白。 2.多设备驱动支持 考虑到应用的广泛性和存储介质的多样性,要求我们在进行设计文件系统时必需考虑对多种存储介质的兼容性。整个系统采纳模块化分层设计的原则和面对对象的实现方法,使得用户可以通过统一的顶层应用程序接口便利地对各种存储介质进行文件操作。利用本文件系统可以管理不同的存储介质,可以同时访问不同的硬件。 3. 多操作系统支持 文件系统的开发是基于 ucos ii,在设计开发过程中,考虑到以后对多操作系统的支持,OS接口模块设计为动态可变,当文件系统应用于其它操作系统时,只需将 OS 接口模块中的操作系统信息变为新的操作系统即可。 4. 牢靠性 由于嵌入式系统的数据资源的重要性,要求存储数据的物理介质必需具有很高的稳定性,可是我们知道一些人为或外在的因素可能会导致介质的损坏,从而造成数据的缺失,所以我们要尽可能提高文件系统牢靠性。 文件系统 的层次结构和功能模块 嵌入式文件系统由于功能和作用与一般桌面操作系统的文件系统不同,导致了二者在体系结构上具有很大的差异性。在一般桌面操作系统中,文件系统不仅要管理文件,供应文件系统调用 API,还要管理各种设备,支持对设备和文件操作的全都性。在嵌入式文件系统中,这种规章发生了很大的变化。在某些状况下,嵌入式系统可以针对特别的目的来进行定制,对嵌入式操作系统的系统功能规整性、可伸缩性及其敏捷性提出了更高的要求。 基于以上的考虑,我们采纳了如上图所示的嵌入式文件系统体系结构,该结构定义的文件系统从上到下有三个层次:第一层为 API 层、其次层为中间转换层、下层为介质驱动层。 I API 层 API 层是文件系统和用户应用程序之间的接口,它有一个标准 C 函数库,其中包含有诸如打开文件(FS_FOPEN)、写文件(FS_FWRITE)等函数。本层的功能是将用户调用传送给中间转换层。这是整个系统设计的核心,也是嵌入式文件系统中用户唯一可见的部分 POSIX中文件系统的标准系统调用全部在该部分中得以实现。 中间转换层 中间转换层要为文件系统的实现供应与硬件无关的统一接口,是文件系统结构规整性的基础。中间转换层包含有文件系统子层及规律块子层,其中文件系统子层将文件操作解释到规律块子层,然后文件系统调用规律块子层并依据不同的设备定义出相应的设备驱动程序;规律块子层主要是同步对设备驱动程序的访问,向上供应友好界面。 介质驱动层 介质驱动层是访问硬件的最低端的程序,该程序的结构要能够便于实现对硬件的访问。本层的功能主要是完成对介质的访问。本层的重要任务就是供应统一的设备驱动程序接口。 依据文件系统的层次结构,可以将该文件系统分成四大功能块:API 接口模块、中间转换模块、磁盘分区模块、设备驱动模块。如上图: I API 接口模块 主要完成文件的基本操作,包含有文件的生成、删除、打开、关闭、文件读、文件写等。 中间转换模块 主要完成对存取权限的检查、介质的选择、规律到物理的转换。 磁盘分区模块 主要完成对几个主要数据结构的初始化,设置文件系统的总体分区信息以及每个分区的几部分:空闲块管理、引导区、FAT 区、文件存储区等。 设备驱动模块 完成存储介质的驱动程序,包含有一个驱动程序函数表和介质读、介质写、检查状态、执行特定命令等驱动程序。 文件系统的具体设计 文件系统组织方式 文件系统规律组织为流式文件,物理组织为连续文件。用户对于流式文件的访问是以字节为单位的。每个文件的内部有一个读写指针,通过系统调用可以将该指针固定到文件的某一个位置处,以后的读写系统调用将从该指针所确定的位置处开头。而用于保存文件的物理设备是划分为块页的,文件的物理结构就是要确定如何将字节保存在存储介质中。所以说文件的物理组织形式对于文件系统的性能有着较为直接的影响,所以我们在进行文件的物理组织选择时比较慎重。结合我们系统的实际应用状况,我们打算文件的物理组织方式采纳挨次结构,这是由于我们的嵌入式应用环境要求实时性高,采集到的数据一旦以文件的方式存储在介质上很少进行改动,也即文件的长度变化不大,所以我们将规律文件的信息存放在外存的连续编号的物理块中。 文件和文件掌握块 FCB 为了实现对于文件的管理,系统需要把握一组有关文件的描述信息,例如文件的名称、文件的地址、文件的建立曰期等等,这些信息组合在一起构成一个数据结构,在这里我们称之为文件掌握块 FCB(File Control Block)。FCB 是文件存在的标志,其中记录着系统对于文件进行管理所需要的全部信息,FCB 所包含内容如图 2 所示。每一个文件都有一个文件掌握块,它们被保存于外存空间,当系统欲访问一个文件时,应当能够依据文件名字找到它所对应的文件掌握块,然后依据文件掌握块中的文件位置信息找到该文件详细所存放的区域。 文件描述符 文件描述符由基本文件名和扩展文件名两部分构成,二者以圆点分开。文件名由 1-8 个字符构成,扩展名由 1-3 个字符构成。分别占据 FCB 中的 00H- 07H 和 08H-0AH 两部分。在 FCB中,文件名和扩展名是左对齐放置的,剩余部分填入空格码。当进行文件删除时,在文件名目记录项的第一字节中放入 E5H,表示该记录项是空项。从公正没有使用过的记录项的第一字节中写入的是 00H,刚刚格式化的根文件名目或刚刚生成的子文件名目的未使用文件名目记录项的开头写入的均是 00H。这个 00H 在文件进行检索时特殊有用,主要是用来确定搜寻到文件名目的什么区域就可以不用再连续搜寻了。例如,当文件检索中没有 00H 时,必需对全文件名目区进行检索,而一旦遇到有 00H 的场合,检索便宣告结束,这样可以大大缩短检索文件的时间,提高了文件检索的效率。 对文件的主要操作 文件系统的功能是通过一系列对文件的操作实现的。为此,系统供应给用户一整套系统调用,用以完成创建、打开、读、写、关闭、删除文件等项工作。对应的函数分别为:FS_FOPEN()、FS_REMOVE()、FS_FCLOSE()、FS_FREAD()和 FS_FWRITE(),各函数均通过驱动模块来实现,详细的代码此处不在排列。 文件的爱护机制 由于文件系统保存着用户特别重要的信息,因而如何爱护信息、防止未授权使用就是全部文件系统必需要解决的重要问题之一。但系统中的全部信息又不能完全成为私有,还必需进行文件共享,以提高资源的利用率和便利用户使用。 文件共享和保密是一个问题的两个方面。对文件的爱护保密是由对文件的共享要求起的。在非共享环境中,不需要再做什么爱护,实际上它已经是极端的完全爱护状况;相反,另一种极端状况则是完成共享,而不做任何爱护。这两种状况都缺乏有用意义,一般用法是有掌握 的进行文件共享。爱护机制通过限制文件的存取类型来实现受掌握共享。允许或禁止对文件的存取受多种因素的限制,如用户的身份、文件本身的性质、对文件所要进行的存取类型等。常用的爱护机制有命名、口令、存取掌握、密码等,对文件的爱护必需要依据实际需要和实现的可能性来选择合适的方法。由于本文件系统主要是以 FAT 文件系统为基础来进行设计的,所以在对文件进行爱护和共享方面同样也有 FAT 文件系统所具有的不足,没有一套完整的文件爱护机制来完成对文件的爱护,平安特性只能通过共享权限来加以实现。 文件系统核心代码截图 各部分代码文件功能解释 api_dir.c Purpose: 对 文件系统的名目 的各种操作,包括显示名目建立,删除等操作的函数 api_in.c Purpose: FS_FRead()函数,从文件中读取数据 api_misc.c Purpose: 对 文件 的各种的操作函数,打开文件,关闭文件,删除文件,文件系统初始化 api.out_.c Purpose: 向一个文件写入数据,FS_FWrite()函数 app.c: Purpose:.主函数.1.向系统申请一段内存空间 2.fs.c app_cfg.c Porpose:定义申请空间的程序的优先级(pid) 定义程序开头时的栈的大小 clibmisc.c Purpose:由于该文件系统所用的 c 库文件并非 c 的运行库函数,而是自己的库函数 包括字符串的复制,比较,测量长度,二进制与字符串的相互转化, 由 src 所指内存区域复制 count 个字节到 dest 所指内存区域.大小写转换函数等 fs.c Purpose:.文件操作测试函数. 包括函数:向某个文件(*name)写(write_file)数据(*txt) _dump_file(const char *name)利用文件系统读取一个文件 fs_api.h Purpose:声明 file_system 的全局函数,定义各种宏 fs_cong.h Propose:此文件包含该文件系统的全部设置 fs_dev.h Purpose: 定义驱动器驱动的结构 FS_device_type(名称,读取参数(id,块,缓冲区), 写入参数(id,块,缓冲区),设备掌握函数) fs_fsl.h Purpose:定义文件系统层的结构 FS_fsl_type fs_info.c Purpose:定义文件系统层功能表,设备驱动程序函数表,规律块层缓存,其中的 _Fs_devinfo 结构可以简述该文件系统是建立在何种设备之上的 fs_int.h Purpose:定义内部参数,这些参数是在整个文件系统层的不同层均有使用 fs_os.h Purpose:定义文件系统的系统层的函数声明(头文件) fs_port.h Purpose:体系结构定义了文件系统的依靠 这个头文件定义了几乎全部的基本的数据类型(INT8U 等)和宏 ,该参数可以依据你的编译器 和 cpu 的种类而转变 fs_x_ucos_ii.c Purpose:对文件句柄的上锁和解锁操作,对文件 option 的上锁和解锁操作 对名目的句柄的上锁和解锁操作 /*filehandle 是一个数字,在文件打开的时候由操作系统安排给一个文件。当访问文件的时候 操作系统使用内部的文件句柄,。一块特别的区域的内存被预留给文件句柄,这个区域的大小打算了有多少 文件可以同时打开。在 DOS 和 Windows,你可以设置最大数量的打开的文件*/ ide_x_hw.h Purpose:Segger SED137XE 板的硬件层 是一个 CF 卡,在 IDE 模式 P8.P9.P10.P7 os_cfg.h Purpose:对系统的宏定义 *name:指向文件名的指针 myfile:文件的物理地址.myfile=FS_FOpen(name,r); int x:对应地址的字符 x = FS_FRead(mybuffer,1,sizeof(mybuffer)-1,myfile) FS_FClose(myfile);关闭文件 UCOS-II :ucos 的源代码 UCOS-II-PORT:移植系统时需要修改的部分 III. . 课程设计感想 通过本次课程设计,使我对 uC/OS 操作系统有了更深化的理解。操作系统是一门实践性较强的课程,为了学好这门课程,必需在把握理论学问的同时,加强上机实践。一个人的力气是有限的,要想把课程设计做的更好,就要学会参考肯定的资料,吸取别人的阅历,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。 程序的编写需要有急躁,有些事情看起来很简单,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。再总体解决大的问题。这样做起来不仅有条理也使问题得到了轻松的解决。 在这个过程中,我也曾经由于实践阅历的缺乏失落过,也曾经仿真胜利而热忱高涨。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然这只是一次的极简洁的课程制作,可是平心而论,也耗费了我不少的心血,这就让我不得不佩服开发技术的前辈,才意识到老一辈对我们.的付出,为了人们的生活更美妙,他们为我们.所付出多少心血啊! 对我而言,学问上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永久不能满意于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财宝,经受是一份拥有。这次课程设计必将成为我人生旅途上一个特别美妙的回忆! 通过这次的课程设计我对于专业课的学习有了更加深刻的熟悉,以为现在学的学问用不上就加以怠慢,等到想用的时候却发觉自己的学习原来是那么的不扎实。以后努力学好每门 专业课,让自己拥有更多的学问,才能解决更多的问题! IV. 附录 由于本次课程设计为小组合作完成。我只负责系统到硬件的代码编写。现附上代码如下: fs_dev.h /* * * Micrium, Inc. * 949 Crestview Circle * Weston, FL 33327-1848 * * uC/FS * * (c) Copyright 2021, Micrium, Inc. * All rights reserved. * * - File : fs_dev.h Purpose : Define structures for Device Drivers - Known problems or limitations with current version - None. -END-OF-HEADER- */ #ifndef _FS_DEV_H_ #define _FS_DEV_H_ /* * * Global data types * * */ typedef struct FS_FARCHARPTR name; int (*dev_status)(FS_u32 id); int (*dev_read)(FS_u32 id, FS_u32 block, void *buffer); int (*dev_write)(FS_u32 id, FS_u32 block, void *buffer); int (*dev_ioctl)(FS_u32 id, FS_i32 cmd, FS_i32 aux, void *buffer); FS_device_type; #endif - fs_info.h /* * * Micrium, Inc. * 949 Crestview Circle * Weston, FL 33327-1848 * * uC/FS * * (c) Copyright 2021 - 2021, Micrium, Inc. * All rights reserved. * * - File : fs_conf.c Purpose : File system configurable global data Unless you are going to add own device drivers, or you would like to modify e.g. order in the device table, you do not have to modify this file. Usually all configuration can be made in fs_conf.h. - Known problems or limitations with current version - None. -END-OF-HEADER- */ /* * * #include Section * * */ #include fs_port.h #include fs_dev.h #include fs_api.h #include fs_fsl.h #include fs_int.h #include fs_conf.h /* * * Externals * * */ /* * * File System Layer Function Tables */ /* FAT function table */ #ifdef FS_USE_FAT_FSL extern const FS_fsl_type FS_fat_functable; #endif /* FS_USE_FAT_FSL */ /* * * Device Driver Function Tables * If you add an own device driver, you will have to add an external for its function table here. */ /* RAMDISK_DRIVER function table */ #if FS_USE_RAMDISK_DRIVER extern const FS_device_type FS_ramdevice_driver; #endif /* FS_USE_RAMDISK_DRIVER */ /* WINDRIVE_DRIVER function table */ #if FS_USE_WINDRIVE_DRIVER extern const FS_device_type FS_windrive_driver; #endif /* FS_USE_WINDRIVE_DRIVER */ /* SMC_DRIVER function table */ #if FS_USE_SMC_DRIVER extern const FS_device_type FS_smcdevice_driver; #endif /* FS_USE_SMC_DRIVER */ /* MMC_DRIVER function table */ #if FS_USE_MMC_DRIVER extern const FS_device_type FS_mmcdevice_driver; #endif /* FS_USE_SMC_DRIVER */ /#if FS_USE_IDE_DRIVER /extern const FS_device_type FS_idedevice_driver; /#endif /* FS_USE_IDE_DRIVER */ #if FS_USE_FLASH_DRIVER extern const FS_device_type FS_flashdevice_driver; #endif /* FS_USE_FLASH_DRIVER */ /* * * Local variables * * */ /* * * Logical Block Layer Cache * If FS_USE_LB_READCACHE is enabled, then the buffer definition for each media is done here according to the settings in fs_conf.h. */ #if FS_USE_LB_READCACHE /* RAMDISK cache settings. There is no cache required for RAM. */ #define FS_CACHEINFO_RAMDISK_DRIVER 0, /* Windrive cache settings. The driver does have its own cache. Therefore we never use LB read cache for it. */ #define FS_CACHEINFO_WINDRIVE_DRIVER 0, /* FLASH cache settings. There is no read cache required for flash. */ #define FS_CACHEINFO_FLASH_DRIVER 0, /* SmartMedia cache settings */ #ifndef FS_SMC_CACHENUM #define FS_SMC_CACHENUM 0 #endif #if (FS_SMC_CACHENUM) (FS_USE_SMC_DRIVER) static FS_CACHE_BUFFER _FS_SMC_BuffersFS_SMC_MAXUNITFS_SMC_CACHENUM; static FS_LB_CACHE _FS_SMC_CacheFS_SMC_MAXUNIT = #if (FS_SMC_MAXUNIT=1) FS_SMC_CACHENUM, 0, _FS_SMC_Buffers00 ; #elif (FS_SMC_MAXUNIT=2) FS_SMC_CACHENUM, 0, _FS_SMC_Buffers00, FS_SMC_CACHENUM, 0, _FS_SMC_Buffers10 ; #else #error Please define _FS_SMC_Cache for desired number of units #endif #define FS_CACHEINFO_SMC_DRIVER _FS_SMC_Cache0, #else #define FS_CACHEINFO_SMC_DRIVER 0, #endif /* MMC/SD cache settings */ #ifndef FS_MMC_CACHENUM #define FS_MMC_CACHENUM 0 #endif #if (FS_MMC_CACHENUM) (FS_USE_MMC_DRIVER) static FS_CACHE_BUFFER _FS_MMC_BuffersFS_MMC_MAXUNITFS_MMC_CACHENUM; static FS_LB_CACHE _FS_MMC_CacheFS_MMC_MAXUNIT = #if (FS_MMC_MAXUNIT=1) FS_MMC_CACHENUM, 0, _FS_MMC_Buffers00 ; #elif (FS_MMC_MAXUNIT=2) FS_MMC_CACHENUM, 0, _FS_MMC_Buffers00, FS_MMC_CACHENUM, 0, _FS_MMC_Buffers10 ; #else #error Please define _FS_MMC_Cache for desired number of units #endif #define FS_CACHEINFO_MMC_DRIVER _FS_MMC_Cache0, #else #define FS_CACHEINFO_MMC_DRIVER 0, #endif /* IDE cache settings */ #ifndef FS_IDE_CACHENUM #define FS_IDE_CACHENUM 0 #endif #if (FS_IDE_CACHENUM) (FS_USE_IDE_DRIVER) static FS_CACHE_BUFFER _FS_IDE_BuffersFS_IDE_MAXUNITFS_IDE_CACHENUM; static FS_LB_CACHE _FS_IDE_CacheFS_IDE_MAXUNIT = #if (FS_IDE_MAXUNIT=1) FS_IDE_CACHENUM, 0, _FS_IDE_Buffers00 ; #elif (FS_IDE_MAXUNIT=2) FS_IDE_CACHENUM, 0, _FS_IDE_Buffers00, FS_IDE_CACHENUM, 0, _FS_IDE_Buffers10 ; #else #error Please define _FS_IDE_Cache for desired number of units #endif #define FS_CACHEINFO_IDE_DRIVER _FS_IDE_Cache0, #else #define FS_CACHEINFO_IDE_DRIVER 0, #endif #else #define FS_CACHEINFO_RAMDISK_DRIVER #define FS_CACHEINFO_WINDRIVE_DRIVER #define FS_CACHEINFO_SMC_DRIVER #define FS_CACHEINFO_MMC_DRIVER #define FS_CACHEINFO_IDE_DRIVER #define FS_CACHEINFO_FLASH_DRIVER #endif /* FS_USE_LB_READCACHE */ /* * * Global variables * * */ /* * * _FS_devinfo * This data structure does tell the file system, which file system layer (currently FAT only) and device driver (e.g. SmartMedia or RAM disk) is used for which device name. If you do not specify the device name in an file system API call, the first entry in this table will be used. */ #ifndef FS_DEVINFO #if FS_USE_SMC_DRIVER #define FS_DEVINFO_DEVSMC smc, FS_fat_functable, FS_smcdevice_driver, FS_CACHEINFO_SMC_DRIVER 0 , #else #define FS_DEVINFO_DEVSMC #endif #if FS_USE_MMC_DRIVER #define FS_DEVINFO_DEVMMC mmc, FS_fat_functable, FS_mmcdevice_driver, FS_CACHEINFO_MMC_DRIVER 0 , #else #define FS_DEVINFO_DEVMMC #endif #if FS_USE_IDE_DRIVER #define FS_DEVINFO_DEVIDE ide, FS_fat_functable, FS_idedevice_driver, FS_CACHEINFO_IDE_DRIVER 0 , #else #define FS_DEVINFO_DEVIDE #endif /* FS_USE_IDE_DRIVER */ #if FS_USE_FLASH_DRIVER #define FS_DEVINFO_DEVFLASH flash, FS_fat_functable, FS_flashdevice_driver, FS_CACHEINFO_FLASH_DRIVER 0 , #else #define FS_DEVINFO_DEVFLASH #endif /* FS_USE_FLASH_DRIVER */ #if FS_USE_WINDRIVE_DRIVER #define FS_DEVINFO_DEVWINDRV windrv, FS_fat_functable, FS_windrive_driver, FS_CACHEINFO_WINDRIVE_DRIVER 0 , #else #define FS_DEVINFO_DEVWINDRV #endif #if FS_USE_RAMDISK_DRIVER #define FS_DEVINFO_DEVRAM ram, FS_fat_functable, FS_ramdevice_driver, FS_CACHEINFO_RAMDISK_DRIVER 0 , #else #define FS_DEVINFO_DEVRAM #endif #define FS_DEVINFO FS_DEVINFO_DEVSMC FS_DEVINFO_DEVMMC FS_DEVINFO_DEVIDE FS_DEVINFO_DEVFLASH FS_DEVINFO_DEVWINDRV FS_DEVINFO_DEVRAM #endif /* FS_DEVINFO */ /const FS_devinfo_type _FS_devinfo = FS_DEVINFO ; const FS_devinfo_type *const FS_pDevInfo = _FS_devinfo; /const unsigned int FS_maxdev=sizeof(_FS_devinfo)/sizeof(FS_devinfo_type); const unsigned int FS_fat_maxunit=FS_FAT_MAXUNIT; ide_x_hw.h /* * * Micrium, Inc. * 949 Crestview Circle * Weston, FL 33327-1848 * * uC/FS * * (c) Copyright 2021 - 2021, Micrium, Inc. * All rights reserved. * * -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


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

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


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