跟着微控制器功用的不断提高,嵌入式运用越来越广泛。可是现在市场上的大型商用嵌入式实时体系,价格昂贵,而且都针对特定的硬件渠道。关于中小型体系开发,购买商用实时体系并不合算。 现在咱们正着手将嵌入式体系软件运用于轿车卫星导航仪体系的一步开发。传统的嵌入式运用并不包含文件体系,而咱们要完结的文件体系需求在车辆导航体系中完结地图数据文件的读写。因而它既要支撑与MS-DOS兼容的文件体系也要支撑其它类型的文件体系。
另一方面,从数码相机到MP3播放机,从掌上电脑到数码摄像机,CF(CompactFlash)卡因为具有体积小、兼容性强、价格相对低价等许多长处,在数码设备上的运用越来越广泛。但若想在CF卡与PC之间传递数据,一般不得不借助于专门的读卡器,这给PC的用户带来了不小的费事。 CompactFlash卡全称为“规范闪存卡”,简称“CF卡”。CF卡的运用空间比较广,最常见的是在数码照相机中用于相片的存储。因为CF卡内部选用模仿硬盘控制器的规划,使得CF卡能够比较容易地通过IDE接口完结与电脑的衔接,必定程度上能够起到移动存储的效果。 一般的嵌入式体系不会供给读写CF卡的接口,所以需求在文件体系中专门规划一个驱动程序。
1 基本原理
CF卡的存取办法有三种:Memory办法、I/O办法以及True IDE办法。咱们挑选的是True IDE办法。需求留意的是,当主机电源一向接通时,拔插CF卡将会使其从本来的True IDE办法从头装备成PC Card ATA办法。所以要让CF卡一向作业在True IDE,需求在电源加电发动时将OE输入信号接地。此办法也支撑8位存取,但咱们挑选了16位存取。一次最多存取的扇区数可由指令码Ech中的第47参数字决议。
CF卡跟硬盘的结构相同。在引导区中装有用于发动体系的代码,以及有关文件体系的重要信息,随后是记载一切磁盘空间的表,再下来便是根目录,然后是一切其它的东西。引导扇区在其结尾处包含有分区表。此表包含了用以标明每个分区开端和完毕的表项,最多能够有四个分区,每个分区可包含不同的文件体系。紧随引导区之后的是FAT(文件分配表),用来记载设备中一切的磁盘空间的信息(此表与UNIX中的I-node表和闲暇表具有相同的功用)。
规划软件时,一起考虑了通用性及可扩展性,意图在于使该文件体系无需别离修正便能够对CF卡、IDE硬盘、RAM Disk、电子盘、SD等不同的存储介质进行操作;读出这些存储介质中的数据,而且能够将数据输送到不同存储设备上。
为了到达这些意图,咱们针对不同CPU的不同处理办法,对硬件操作程序进行别离,将设备有关的底层程序变成与设备无关的上层操作。这样,当体系新增功用之后,不用更改每个子程序,只需求在某些接口文件的数据结构中增加或许更改数据项即可;又考虑到用户对上层操作的透明性,咱们选用面向目标的办法,上层结构中存取操作的driver结构(含read、write数据项)是虚拟的,在底层才将它详细化为CF卡的读写扇区指令(操作码为:20h、30h)。
2 体系规划完结
依据上述原理,可完结软件规划,分为六个首要部分。
其间,CF卡驱动程序规划的关键是CF卡的存取操作函数所选用的指令码有些不同。别的,咱们运用驱动程序目标来代表CF卡设备驱动程序。该驱动程序目标关于用户是部分不透明的,数据项包含读写函数的指针,这些函数由文件体系程序输出(包含两部分函数,用户可见API函数调用和用户不见驱动存取函数)。此目标的数据结构声明如下:
typedef struct CF_XFILE_DRIVER{
BYTE driver_name; /*介质标明;CF卡、IDE硬盘、Flash卡、RAMDISK等,删去驱动的话,需求从头记载DRIVER号*/
…… /*IRP处理函数*/
}CF_XFILE_DRIVER;
如果有多个CF卡,需求用别的一个特定的数据结构Next_Driver来把它们水平衔接在一起。然后,用链表来办理这些数据结构,办理办法类似于 WDM(Windows Driver Model)。
3 测验剖析
通过调试运转,该文件体系功用杰出。与咱们之前现已移植过的Nucleus、μC/OS-II、UNIX的操作体系的文件体系比较,本文介绍的文件体系可移植性更强;除了文中侧重介绍的CF卡,通过对底层驱动的简略修正就能够运用于其它存储介质如RAMdisk、IDE硬盘、Flash等(其间IDE硬盘和Flash也现已调试成功)。别的,本文介绍的文件体系对硬件渠道的装备要求下降,而且关于文件操作的运转速度并未减慢。