基于DSP视频系统的CF卡FAT文件系统设计与实现
FAT_read函数的具体操作步骤如下: 图4为WinHex工具下查看的CF文件系统信息内容,可以查看到CF卡中的内容存放形式以及各个部分的起始位置以及占用空间大小。 实验结果表明,本文设计的FAT文件系统能成功地运用在DSP视频处理平台上。通过该系统,可对视频数据进行FAT文件格式的实时存储。此系统设计方案还可应用于一相关存储设备(如SD卡)和实时系统。
(1)调用FAT_getfileinfo函数判断文件是否存在,并获取文件的目录项信息。
(2)读取FAT表,并通过FAT表和目录项中的起始簇号计算文件在数据区的偏移位置。
(3)用剩余文件长度作为循环条件重复执行以下操作。
读取帧头信息,确定帧数据占的扇区数,并通过本簇已读扇区判断帧存储情况。参照图2,若是情况(a),则在读帧头和帧数据时都不需要更新;若是情况(b),则在读完此帧数据后更新簇号;若是情况(c),则在读帧数据时更新簇号;如果是情况(d),则在读取帧头后就立即更新簇号。保存帧头的时间和长度信息,和帧数据信息利用SCOM通信一并发送至解码线程。语句如下,
MsgWork.bufChannel=FRAME_BUF;//对SCOM消息赋值
SCOM_putMsg(fromWorktoEnc,NULL);//向上游线程发送同步信息
SCOM putMsg(fromWorktoDec,MsgWork);//向下游线程发送SCOM消息
SCOM_getMsg(fromDectoWork,SYS_FOREVER);//等待接受下游线程同步消息
FAT_write为写文件函数,参数为文件名和写命令。写命令为TRUE时,实现文件拼接,为FALSE时,实现文件覆盖。写文件时,系统中的线程全为有效线程,所以在线程通信和同步时需要同时考虑上下游线程。
(1)读取文件的目录项信息,获得其长度,起始簇号等信息,通过簇链找到文件已写到的最后一个簇号。并利用文件长度信息,计算出最后一簇已写的扇区数。若writen_seetnum为0,则需要寻找下一个未占用的簇。
(2)利用SCOM通信获取编码线程发送过来的帧头信息和帧数据,将其写入CF卡,按照图2所示的4种情况进行处理。与读文件不同的是,在更新簇号时需要寻找未占用簇。
(3)写完此帧数据后,通过SCOM通信向解码线程发送数据消息,并更新目录项和FAT表及FAT2表。
(4)重复以上步骤。写完所有的图像帧后,将更新后的目录项FAT表及FAT2表写入CF卡相应位置。
若要实现文件覆盖,在写文件之前调用FAT_delete函数将文件删除,然后再重新创建写入即可。
FAT_delete函数首先调用FAT_getfileinfo函数判断文件是否存在,若存在则获取文件的目录项及其索引位置。将FAT表中的簇链清除,并将目录项中文件名的第一个字符值置为0xe5,表示已删除。
2 实验结果与结论
CF卡FAT文件系统的设计功能分别在DM642平台和Windows操作系统中得到了验证。在DM642视频处理平台上,可对文件进行各种操作,包括格式化CF卡,创建新的空文件,写入视频文件,包括以拼接方式写文件和以覆盖方式写文件,删除文件。
在DM642平台上写入4个视频文件到CF卡,视频文件经过H.264格式压缩,每个文件写入200帧。将CF卡通过读卡器与PC机连接,可在PC机中查看到文件并进行各种操作,如删除、移动、复制等。
图3是CF卡在Windows系统中视频文件的查看。
系统 设计 实现 文件 FAT DSP 视频系统 CF 基于 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- linux文件系统基础(02-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)