本文讲述了Contiki\core\cfs\
目录下的文件关系,理清这些关系,有助于移植、应用开发。
1. Contiki\core\cfs\文件关系
1.1 文件清单
[1]cfs.h --Coffee文件系统抽象API
[2]cfs-posix.c --基于POSIX的Coffee API实现(文件操作部分)
[3]cfs-posix-dir.c --基于POSIX的Coffee API实现(目录操作部分)
[4]cfs-ram.c --基于RAM的Coffee API实现
[5]cfs-coffee.h --基于FLASH的Coffee头文件
[6]cfs-coffee.c --基于FLASH的Coffee API实现
[7]cfs-eeprom.c --基于eeprom的Coffee API实现
[8]cfs-xmem.c --基于外部存储器的Coffee API实现
1.2 说明
[2][3]是基于POSIX的Coffee API实现,当在InstantContiki直接运行(即运行平台是Linux,native),则调用cfs-posix
、cfs-posix-dir
中相关的cfs_open/read/write/
,而这些函数调用POSIX标准的open/read/write
函数。
[5][6]是基于FLASH的Coffee API实现,测试cfs_open/read/write
之前需要把文件cfs_coffee_arch.c
宏COFFEE_READ
、COFFEE_WRITE
、COFFEE_ERASE
分别映射到硬件相关的函数。感觉cfs-coffee
会更通用一些,可以映射到片内FLASH(如stm32_falsh_read/write/erase
)、片外FLASH(如xmem_pread/pwrite/erase
)、eeprom(eeprom_read/write/erase
)、甚至是SD卡(sd_read/write/erase
)。而其他诸如cfs-xmem/eeprom
,更具定制性,无须宏COFFEE_READ/WRITE/ERASE
映射。
[4]是基于RAM的Coffee API实现,如果版子的RAM太小,那几乎跑不起了。
[8]cfs-xmem.c
是基于外部存储器(external memory)的Coffee API实现,比如ST M25P16就是这样用的。
2. 移植相关
在IAR平台,包含cfs/所有文件会报重定义错误,只能包含[2][3]或[4]或[5][6]或[7]或[8]其中一个。xmem也可能是FLASH(比如ST M25P16),也可直接用cfs-coffee.c
,使用的时候,将宏COFFEE_READ/WRITE/ERASE
映射到硬件相关的函数(如xmem_pread/pwrite/erase
),只是cfs-xmem
更具定制性,效率应该也高。