基于嵌入式视频存储的专用文件系统设计
每个录像文件至少需要使用一个索引块,每个索引块包含N个索引信息,一个数据块对应一个索引信息。每个索引信息描述下一个数据块的物理偏离和时间偏移,每个索引块描述本索引块所描述第一个数据块的物理地址和时间偏移。典型的数据结构如下:
typedef struct {
UInt8 TimeOffset;/*与上一个数据块的时间偏移*/
UInt8 DBNOffset;/*与上一个数据块的物理偏移*/
} IndexInfo; /*索引信息*/
typedef struct {
UInt16 BeginDBN;/*本索引块的起始数据块地址*/
UInt16 TimeOffset;/*本索引块与上一个索引块的时间偏移*/
IndexInfo IndexInfo[N];
} IndexBlockInfo; /*索引块信息,包含N个索引信息*/
2.5 数据区
数据区是指整个磁盘空间除了用于以上文件系统开销外的所有空间,重新划分为若干个数据块,数据块的大小可以自由设置。数据块是指录像数据保存的最小单元,一般以32~512 KB之间为宜,每个数据块的头部保留几个字节用于保存本数据块的时间戳和相关数据块的地址偏移。数据块的结构如图2所示。
图2 数据块结构示意图
文件系统在使用前需要获取磁盘的容量和可使用扇区的大小,并定义一个最大文件数。由于文件信息和索引信息需要占用一定的磁盘空间,并且与最大文件数密切相关,在实际使用时定义一个最小文件的大小,并通过磁盘容量得到一个固定的最大文件数,这样文件信息和索引信息所占用的磁盘空间在整个磁盘中只占很小的比例。
3 系统实现
3.1 数据的存储
数据的存储过程比较简单,创建文件的时候系统自动分配一个唯一的文件号,并通过文件号进行计算得到文件信息和索引信息对应的磁盘地址。当有足够一个数据块大小的数据时打包并保存到当前可以使用的数据块,同时更新文件信息和索引信息。
图3 数据存储流程
DIY机械键盘相关社区:机械键盘DIY
评论