新闻中心

EEPW首页>嵌入式系统>设计应用> 如何在C51系统上实现YAFFS文件系统

如何在C51系统上实现YAFFS文件系统

作者: 时间:2011-05-18 来源:网络 收藏

3.2 向风格转化

是在Linux环境下利用开发用户程序的C语言开发的。它与是有些差别的,主要有:

  ◇不支持__inline__函数修饰符,可以将其宏定义为空;
  ◇ u8、u16、u32都需要重新宏定义成为C51的数据类型unsigned char、unsigned int和unsigned long;
  ◇ off_t定义为long。

  在源代码中有用data和bit作为变量的,而在C51中这些都是关键词,须将其替换。

  在源代码中yaffs_Device结构体的定义中使用了带参数的函数指针,通过调用该指针指向的函数来对Flash硬件进行操作,而C51中通过寄存器函数指针来调用函数不能传递实际参数,除非所得参数可在寄存器间传递。因此这里将yaffs_Device结构体定义中的函数指针去掉,而直接调用yaffs_if.c中的Flash接口函数。

向C51风格转化时,最好是在Keil集成开发环境中一边修改,一边编译,发现错误后再进行修改。当编译器提示有多个错误时,要从第一个错误开始修改;可能前面的错误修改完毕,后面的错误就不再是错误了。

4 C51下的YAFFS使用实例

  下面的程序代码是设计中的对DBF数据库操作的关键代码。

yaffs_StartUp();//设置一些参数,包括各分区在Flash中的起始块和结束块的地址、预留块数等
yaffs_mount(/flash); //YAFFS支持多个分区,这里选择挂载/flash分区新建db1.dbf
f=yaffs_open(/flash/db1.dbf, O_CREAT,S_IREAD | S_IWRITE);
yaffs_close(f);//关闭文件db1.dbf
f=yaffs_open(/flash/db1.dbf, O_RDWR,0);//以读/写的方式打开文件db1.dbf
r=yaffs_write(f,hello,5);//向文件写数据
yaffs_lseek(f,2,SEEK_SET);//移动文件读/写指针
r=yaffs_write(f,world,5);
r=yaffs_lseek(f,0,SEEK_SET);
r=yaffs_read(f,buffer,10);//从文件读取数据
r=yaffs_close(f);//关闭文件db1.dbf
r=yaffs_unlink(/flash/db1.dbf);//删除文件db1.dbf

  可见, YAFFS的接口函数的使用方法与标准C语言中对文件的操作函数十分相似,简单易用。

5 总结

  YAFFS文件是第一个专门为NAND Flash存储器编写的嵌入式文件系统。它了掉电保护、疲劳均衡和有效的垃圾回收,与JFFS相比占用资源更少,运行速度更快;与FAT相比,更适合用于管理NAND Flash数据存储器。在C51系统中如果需要Flash文件系统,那么移植YAFFS是个不错的选择,但是毕竟它是一个在32位机的Linux下开发出来的,要让它能与8位机的C51风格完美结合,还需要进一步的努力。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭