专利名称::基于单片机的流媒体文件管理系统的制作方法
技术领域:
:本发明涉及利用硬盘等存储介质存储和访问流媒体文件的技术,尤其是一种基于单片机的流媒体文件管理系统。
背景技术:
:在个人计算机(PC)等32位CPU系统中,管理硬盘等大容量的存储介质已经是一项非常成熟的技术,通常采用"FAT32"或者"NTFS"文件管理系统。这类文件管理系统可以较准确地存储和读取各种数据,但运行时对硬件的要求较高,在某些应用场合不适宜于低成本地满足要求。随着技术和制作工艺的进步,各类存储介质成本一再降低。硬盘等存储介质已经不再是个人计算机的专用外围设备,很多基于单片机芯片的家用电器产品,也纷纷使用了这些存储介质。如个人视频录像机(PVR)、数字视频录像机(DVR)就是大容量存储介质应用于家用电器产品的典型例子。这类产品大都使用私有的文件管理系统,如基于Linux的Tivo公司设计的名为MFS的文件管理系统、SGI公司设计的XFS文件管理系统等。但是,由于各厂家硬件条件相差很大,目前为止还没有一个成熟的并且免费的文件管理系统。无论是上述个人计算机中普遍使用的文件管理系统,还是各种私有的文件管理系统,在运行时都需要大量的内存空间支持,以保证文件管理系统的实时修改更新。在内存资源丰富的系统中,文件的管理完全可以实现,但是在资源不足的嵌入式系统中,内存空间极为有限,如果依然将硬盘上所有的表全部读进内存,虽然这样容易做到内存中的表与硬盘中的表实现同步,但是无疑将造成大量的数据空间被使用,而且不利于今后的扩展。另一方面,传统的文件管理系统针对的是大小不一、各种类型文件的存取,没有考虑超大型的流媒体文件的特殊处理方法并合理地分配硬盘存储介质的空间。采用8位单片机的嵌入式系统对大容量的硬盘等存储介质进行管理,由于成本低廉,应用正在逐渐普及,但面临的主要问题是8位单片机嵌入式系统的内存非常小,系统没有多余的内存资源供给传统的文件管理系统运行,需要有一种占用内存非常小、运行可靠的文件管理系统;同时,由于流媒体文件对于数据实时性的要求非常高,要求硬盘有足够快的时间来完成读写操作,因此在设计文件管理系统时必须考虑合理的存储介质空间分配方法;另外,流媒体文件的特点是数据量大,连续性强,所设计的文件管理系统必须具有能够处理超大文件的能力,有效提高文件存取的效率。
发明内容本发明的目的在于针对以8位单片机为基础的嵌入式系统环境下提供一套高效、稳定的文件管理系统,实现流媒体文件的录制和播放以及存储介质的管理。本发明的技术方案如下一种基于单片机的流媒体文件管理系统,包括存储流媒体文件的硬盘、用作数据读取临时存放的缓存器、用于对流媒体文件进行解码的解码器以及控制文件读取的单片机,所述硬盘经缓存器接收从调谐器入的流媒体信号;解码器经缓存器从硬盘中读取流媒体数据,并将信号进行解码所有的数据存取操作均需通过单片机的控制完成。所述硬盘1分成6个区MBR区、ENTRYS区、DIR区、RESERVE区、CMT区及DATA区,并将存放流媒体文件数据的DATA区加大。所述对流媒体文件进行读取,采用链表的形式管理文件,设计了两种类型的簇链(1)、每个流媒体文件形成一个簇链,播放时提供实际的物理地址;(2)、所有的空闲簇形成一个链(空簇链),录制时随时提供空簇号换算实际物理地址,利用空簇链的连接关系直接录制;两种簇链的起始、结束信息储存在RESERVE区,簇链信息存储在CMT区中,同时规定了三项原则1、整个文件管理系统占硬盘空间前8M空间(包括备份区);2、第一个簇,在硬盘上实际从8M开始;3、每一个簇占用2M的存储空间。所述缓存器的存储空间较小可以是0.30.6K,作为数据临时存放的存储介质,其读、写操作采用动态读表的方式,即在CMT区中所有超过0.30.6K的链表,用该缓存器读取,当缓存器中的数据信息用完后,清空缓存器并再次读取,反复读取n次直至所述链表中的数据信息用完,这样将一个大型的链表分为n个0.30.6K的小链表,达到动态使用内存的目的。图1为实施流媒体文件存储的系统框图。图2为所定义的硬盘分区图。图3为存放簇链链表号的CMT区结构。图4为数据在硬盘中存放的结构。具体实施例方式本实施例包括存储流媒体文件的硬盘l、用作数据读取临时存放的缓存器2、用于对流媒体文件进行解码的解码器3以及控制文件读取的单片机5。在图1所示的流媒体文件存储系统框图中,硬盘1经缓存器2接收从调谐器4入的流媒体信号,将数据写入硬盘1中;解码器3经缓存器2从硬盘1中读取流媒体数据,并将信号进行解码;而所有的数据存取操作均需通过单片机5的控制完成。为有效地对硬盘进行管理,将硬盘按照图2所示分成6个区MBR区、ENTRYS区、DIR区、RESERVE区、CMT区及DATA区,并将存放流媒体文件数据的DATA区加大。图2中的1区为MBR区利用硬盘的第1个扇区储存MBR信息,提供硬盘及文件系统的一些基本信息,在开机后系统会检查MBR区数据,以判定是否该硬盘需要被格式化。图2中的2区为ENTRYS区作为文件入口标志区,位于硬盘的第2个扇区,定义unsignedcharentrys[512]的数组,存放52个节目标志1=已有文件、0=没有文件。在文件管理系统使用中,该数组用于判断目录区的512个文件位置是否已经创建了文件。如果entrys[X]^1,说明第X号文件已经被创建,如果删除该文件后entrys[X]=0,其优点在于,对于目录区的操作可以减少,因为当文件被删除时目录区的文件信息并不需要在物理上删除,而是将标志位改为0即可,下次创建文件时直接将原来的文件信息覆盖。图2中的3区为RESERVE区512个字节,位于硬盘的第3个扇区,存放一些操作中用到的变量。规定reserve[O]存储空簇链表首簇地址,reserve[l]存储空簇链结束地址,reserve[2]存储空簇链占用簇数,初始值为该硬盘最大簇数。如果没有空簇,规定reserve[O]-reserve[l]=NULLEMPTY=最大簇数,reserve[2]=0。详细信息如下表<table><row><column>number</column><column>Datatype</column><column>value</column></row><row><column></column><column>Reserve[O]</column><column>Unsignedint</column><column>空簇链表首簇地址</column></row><row><column></column><column>Reserve[l]</column><column>Unsignedint</column><column>空簇链结束地址</column></row><row><column></column><column>Reserve[2]</column><column>Unsignedint</column><column>空簇链占用簇数</column></row><row><column></column><column>Reserve[3]</column><column>Unsignedint</column><column>当前播放节目号</column></row><row><column></column><column>Reserve[4]</column><column>Unsignedint</column><column>己录制节目总数</column></row><row><column></column><column>Reserve[5]</column><column>-</column><column>-</column></row><row><column></column><column>Reserve[6]</column><column>Unsignedint</column><column>当前时间</column></row><row><column></column><column>Reserve[7J</column><column>Unsignedint</column><column>文件系统总簇数</column></row><row><column></column><column>Reserve[8]</column><column>-</column><column>-</column></row><table>图2中的4区为DIR区从0x0010开始,总共512个扇区,存放录制的节目信息,每个节目18字节占用一个扇区。在文件管理系统运行中,会产生对一个文件的创建、删除、复制等操作,因此设定每个文件都独自占用一个扇区,方便对文件信息的定位和单独的修改。图2中的5区为CMT区位于0x0400开始的扇区中,大小根据硬盘容量而定,CMT区存放的是一个或多个涵盖了所有簇号的链表,用一条或多条链将硬盘全部管理起来。当进行录放操作时将由此区域的数据提供符合要求的簇号。图2中的6区为DATA区从8*2048扇区开始,按不同硬盘容量分成簇。本实施例采用链表的形式管理硬盘中的数据,以加快数据读写的时间。如图3所示,将流媒体数据文件存放地址以链表的形式排列,第一个文件占用n个簇,相应的链表号为CPhCPln,链表中存放的数据地址为DAnDAln,通过DA物理地址即可从图4所示的硬盘中读取对应的文件数据;第m个文件占用p个簇,相应的链表号为CPm,CPmp,链表中存放的数据地址为DAmlDAmp,也可通过DA物理地址从图4所示的硬盘中读取第m个文件的数据。对于类似流媒体等数据量比较大的文件,将数据写入硬盘的方式决定了读取硬盘数据的速度,如果将一个流媒体文件的数据写入硬盘中连续的空间,可有效降低磁头移动的次数,减少流媒体文件读取的时间,为此,引入空簇链的概念为了管理空闲的簇,使每次读写操作后所有的空闲簇自动形成一个链。这样,当再有写入(录制)操作时,我们就可以利用空簇链的连接关系直接录制,比逐个査询空闲的簇节省时间。空簇链的大小决定于当前硬盘中存放文件的多少,在图3所示的情况下,空簇链占用q个簇,其相应的链表号为EdECq,链表中存放的空簇地址为EA,EAq。簇链的创建在格式化硬盘时,从硬盘信息中读出硬盘实际的扇区数,然后减去文件系统所占用的硬盘空间(设定为2M),再除以每簇的大小,就得到硬盘支持的最大簇数clus—count,最后创建一个空簇链,长度就是clus一count。这样能够尽量用尽硬盘,又保证每个簇完整。在初始化时,将reserve记录空簇链的起始簇号;reserve[1]记录空簇链的结束簇号;reserve[2]记录空簇链所含的簇数。读入内存,并且在每次读写硬盘操作时这三个变量都会随之改变以反映空簇链的状态。空簇链的操作方法格式化后所有的簇形成一个大的空簇链,起始簇号、结束簇号、簇数都可知。当开始录制操作时,直接提供空簇链的起始簇号,根据链接关系录制。录制结束时,则最后一簇被设置为FILEEND,空簇链的起始簇号reserve[O]被修改为cmt—clust—chain[XXX].NextClust。形成新的空链,并将参数存入硬盘,供以后的操作使用。如果一直进行录制操作,在录制时录制到reserve[l]时(空簇链结束簇),证明已经没有空簇了即硬盘已满。此时,使reserve=NULLEMPTY、reserve[l]=NULLEMPTY、reserve[2]=0。表示没有空簇存在,无法再录制。在使用过程中,用户可能删除任意位置的一个节目,在删除时得到被删除节目的起始簇号、以及结束簇号。这就是新的空簇链的起始簇号与结束簇号。引入空簇链的概念可以大大提高录制和播放时文件管理系统提供符合要求的簇号的速度。利用链表的概念来管理硬盘,使硬盘成为一个有序的状态,能够大大提高文件系统的效率。常规的文件管理系统运行时需要大量的内存空间支持,以保证文件系统的实时修改更新。在计算机等终端设备上内存资源丰富,完全可以实现常规的文件管理系统,但是在基于8位单片机的嵌入式系统中,内存空间极为有限,如果依然将硬盘上所有的表(6个)全部读进内存,虽然这样容易做到内存中的表与硬盘中的表实现同歩,但是无疑造成大量的数据空间被使用,例如CMT链表在管理80G硬盘时就已经达到了20K,而且不利于今后的扩展。本实施例采用动态读表的方式解决内存的使用问题。本实施例中将缓存器的存储空间设定为0.5K,因此所有超过0.5K的表,都用这个0.5K的缓存器来读取,当缓存器中的数据信息用完后,更新缓存器即可。例如CMT区的链表,只定义一个cmt一clust一chain一t类型的大小为0.5K的缓存器,录放时用缓存器的信息进行,当缓存器中信息用完再更新缓存器。这样就化一个大型的链表为多个0.5K的小链表达到动态使用内存的目的。权利要求1、一种基于单片机的流媒体文件管理系统,包括存储流媒体文件的硬盘、用作数据读取临时存放的缓存器、用于对流媒体文件进行解码的解码器以及控制文件读取的单片机,其特征在于所述硬盘经缓存器接收从调谐器传入的流媒体信号;解码器经缓存器从硬盘中读取流媒体数据,并将信号进行解码;所有的数据存取操作均需通过单片机的控制完成。2、根据权利要求1所述单片机的流媒体文件管理系统,其特征在于所述硬盘1分成6个区MBR区、ENTRYS区、DIR区、RESERVE区、CMT区及DATA区,并将存放流媒体文件数据的DATA区加大。3、根据权利要求1和权利要求2所述的基于单片机的流媒体文件管理系统,其特征在于所述对流媒体文件进行读取,采用链表的形式管理文件,设计了两种类型的簇链(1)、每个流媒体文件形成一个簇链,播放时提供实际的物理地址;(2)、所有的空闲簇形成一个空簇链,录制时随时提供空簇号换算实际物理地址,利用空簇链的连接关系直接录制;这两种簇链的起始、结束信息储存在RESERVE区,簇链信息存储在CMT区中。4、根据权利要求1和权利要求2所述的基于单片机的流媒体文件管理系统,其特征在于所述缓存器的存储空间较小可以是0.30.6K,作为数据临时存放的存储介质,其读、写操作采用动态读表的方式,即在CMT区中所有超过0.30.6K的链表,用该缓存器读取,当缓存器中的数据信息用完后,清空缓存器并再次读取,反复读取n次直至所述链表中的数据信息用完。全文摘要一种基于单片机的流媒体文件管理系统,包括存储流媒体文件的硬盘、用作数据读取临时存放的缓存器、用于对流媒体文件进行解码的解码器以及控制文件读取的单片机,所述硬盘经缓存器接收从调谐器传入的流媒体信号;解码器经缓存器从硬盘中读取流媒体数据,并将信号进行解码;所有的数据存取操作均需通过单片机的控制完成。通过将所述的硬盘分成6个区,并加大DATA区的容量,可使系统存储大容量的流媒体数据;用链表的方法管理文件,通过定义两种链簇,使文件读写速度更快;采用动态读表的方式进行文件的读写缓存,解决了在低内存条件下的硬盘数据存取问题。文档编号G06F17/30GK101174266SQ20061016191公开日2008年5月7日申请日期2006年12月7日优先权日2006年11月1日发明者侯文博,熹陈申请人:北京海尔集成电路设计有限公司