嵌入式文件系统在工程机械监控器上的移植
2.6 文件管理的程序移植
这部分是关于文件系统的文件基本操作程序,主要包括:初始化文件指针系统,查找已打开的指定文件的文件句柄,删除文件,查找以读写方式打开的指定文件的文件句柄,只读方式打开文件,读写方式打开文件,移动文件读/写位置,以指定方式打开文件,关闭指定文件,从文件读一个字节,读取文件,写一个字节到文件,写文件,关闭所有打开的文件,判断文件是否读/写到文件尾,从文件指针当前位置读取一页,从文件指针当前位置写入一页。在这部分函数里,着重修改的是两个函数:读取文件FileRead()和写文件FileWrite()。第一个函数的原型是这样的:
不难看出,这个函数读取文件的时候是一个一个字符读的,而且每读一个字符都要从盘里读而不是从缓存里读,这样不仅速度慢,而且对磁盘的操作太频繁,容易减少磁盘的寿命。为了解决这个问题,对上述函数进行了修改。首先创建了一个新函数:从文件指针当前位置读取一页FileGetPage(),这个函数一次性最大能够读取一个Page大小的文件。然后,在FileRead函数里判断,如果要读取的文件大小不足一个Page,就用memcpy()这个库函数将文件里要读取的内容直接拷贝到缓冲区;如果要读取的文件超过一个Page,就计算出有N个Page,然后循环N次调用FileGetPage(),最后将不足一个Page的部分用memcpy()这个库函数去拷贝。
根据相同的思路,又创建了一个新函数:从文件指针当前位置写入一页FileWritePage(),并对ZLG—FS原来的FileWrite()函数进行了修改。通过实验发现,这样修改以后,大大提高了文件系统的读写速度。原来读取一个几兆的文件需要半个多小时,现在不到一分钟就可以完成了。
2.7 目录管理的程序移植
Dir.c文件是关于FAT文件系统的目录基本操作程序,主要包括:用户文件/目录名转换为系统名,获取FDT所在目录的开始簇号及系统内名称,获取指定目录的驱动器(驱动器号为0、1、2等),改变当前逻辑盘,获取指定目录开始簇号,建立目录,删除目录,改变当前目录。这里面有几个函数作过微小的修改,在此不细述。
2.8 文件系统在嵌入式系统上面的移植
在智能监控器中,使用的嵌入式系统是μC/OS—II。正好ZLG—FS提供了其文件系统在μC/OS—II上面的移植程序,就是文件OSFile. c,该文件里面的函数和File.c里面的函数功能类似,只不过都打上了μC/OS—II系统的烙印,这些函数都通过调用Together(a,b,c)来完成对文件的一些操作。Together(a,b,c)是为简化接口函数编写的一个宏。最后一个函数是OSFileTask(),该函数是在系统主程序里调用的,作用是创建一个文件系统服务任务,对文件的所有操作都可以在该任务里以命令的形式被执行。这一模块的程序基本不需要修改。
结语
在整个文件系统的移植过程中,首先要将文件系统里的程序全部吃透、消化,然后再根据自己的需要进行修改,边修改边做实验,通过这个过程还可以学习他人好的编程方法。移植完后,通过实验验证了嵌入式文件系统的移植效果良好、系统稳定。
1
2
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码