(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系统中视频文件的查看。
图4为WinHex工具下查看的CF文件系统信息内容,可以查看到CF卡中的内容存放形式以及各个部分的起始位置以及占用空间大小。
实验结果表明,本文设计的FAT文件系统能成功地运用在DSP视频处理平台上。通过该系统,可对视频数据进行FAT文件格式的实时存储。此系统设计方案还可应用于一相关存储设备(如SD卡)和实时系统。
上一页 [1] [2] [3]