系统的资源消耗来讲,主要包括程序代码开销、处理器占用时间、运行时内存开销以及额外的flash存储器消耗。其中,运行时内存开销最限制flash文件系统的应用,同时设计结构的改善与运行时内存开销直接相关。所以针对资源消耗的结构优化主要着重于降低运行时的内存开销。 flash存储器的擦除单位是区块(block),这是本flash文件系统中数据存储分配的最小单元。如果不采用任何措施的话,运行时内存开销中将至少包括备份一个完整区块数据的缓冲区。但一个flash存储器的区块可能很大(sumsung[tm]km29u128是16kb),这在很多嵌入系统中都是过大的资源开销(最通用的8位微处理器mcs-51系列,总线寻址的能力只有64kb),必须进行改进。 为此,采用交换缓冲区(swap buffer)技术来解决这个困难。当需要准备某一个区块的数据时,并不直接向该区块写入,而是首先擦除用于做交换缓冲区的区块,然后逐步向交换缓冲区填入目的数据内容。因为此时,任何有用数据内容都未被破坏,所以运行内存中的缓冲就可以做得比较小。当交换缓冲区填写完成后,再擦除目的区块,拷贝交换缓冲区内容到目的区块。 采用交换缓冲区后,对
cache_end>>12)<<16)|(non_cache_start>>12); /*所有的外部硬件中断为低电平触发*/rextint=0x0;}#define rb (0x08)#define ce (0x10)#define cle (0x04)#define ale (0x08) #define rkm29uxdata (*(volatile unsigned char *)0x02000000) //bank1 /*km29u128操作宏定义*/#define fc_cmd {rpdatc|= cle; rpdatf&=~ce; rpdatc&=~ale;} //{rpdatc |= cle; rpdatc &= ~(ale|ce);}#define fc_addr {rpdatc|= ale; rpdatf&=~ce; rpdatc&=~cle;} //{rpdatc |= ale; rpdatc&=~(cle|ce);}#define fc_data