新博客:http://sparkandshine.net/
分类: 嵌入式
2012-03-29 11:45:47
摘要:
本文讲述了Contiki\core\cfs\目录下的文件关系,理清这些关系,有助于移植、应用开发。
一、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就是这样用的。
二、移植相关
在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更具定制性,效率应该也高。