|
【楼主位】 superyongzhe 最后的骑士
积分:147
派别:
等级:------
来自:卡里姆多
经过一个多月的努力,终于完成了fat文件系统的读写函数。期间由于过年,杂事较多,所以一再推迟。起初是模仿zlgfs,但当写到一半时觉得这样构架很难写。于是又返工,重新设计,十分郁闷。到最后从中能找到zlgfs影子的地方也就是几个结构体而已。虽然也有缓冲区,但其算法已经是比zlgfs复杂很多,是参考linux的缓冲区算法的,查找使用的是一个双向循环链表和一个hash表,弄了好久才把主要的bug除掉。
总之,主要就是实现了在fat16文件系统中的多级目录,及文件目录的读写,创建 。最后还写了一个文本文件的读写和bmp图片的读写,结合我以前在这个开发板上做的gui,实现了触摸屏显示24位bmp图片的功能。我测试时,只要在sd卡上存储上24位bmp图片就可以在lcd上显示,十分方便。
其中包含fat文件系统读写程序在EasyFS目录中,此源代码是ads1.2工程,是在fs2410开发板上的。
点击此处下载 ourdev_418380.rar(文件大小:3.75M) (原文件名:EasySystem_2.rar)
点击此处下载 ourdev_612887.rar(文件大小:3.75M) (原文件名:EasySystem_2.rar)
(原文件名:ourdev_596204.JPG)
(原文件名:1--磁盘信息.jpg)
这是在添加文件系统的磁盘驱动程序时在串口中打印的磁盘信息。
(原文件名:ourdev_612928.jpg)
(原文件名:2.jpg)
这是测试文件显示和创建,先在串口中打印文件"11111\\maomaob.txt",然后创建文件"mao\\shuang\\pei\\chengmao.txt",并向其中写入"mao mao cheng pei"
(原文件名:ourdev_612929.jpg)
(原文件名:2--创建一个文本文件.jpg)
(原文件名:ourdev_612930.jpg)
(原文件名:3.jpg)
这个上面的图标也是在存储在sd卡中的,其中左边和黑白条纹就是使用下面的这段代码创建的bmp图片。
(原文件名:ourdev_612931.jpg)
(原文件名:3--创建一个图片.jpg)
//填充图片
for(uiCount=0;uiCount<60*100*3;uiCount+=3)
{
ucaBuffer[uiCount ]=uiCount%60*90; //B
ucaBuffer[uiCount+1]=uiCount%60*90; //G
ucaBuffer[uiCount+2]=uiCount%60*90; //R
}
EF_ListDir("bdir\\");//列出目录中的文件
DA_CreateBMP("bdir\\mypic.bmp",60,100,ucaBuffer);//创建bmp图片
EF_PrintFileInfoEx("bdir\\mypic.bmp");//显示bmp图片的信息
EF_ListDir("bdir\\");
DA_PrintBMP("bdir\\mypic.bmp",10,10);//显示bmp图片,上图的左上角黑白条文就是这里显示的。
(原文件名:ourdev_612938.jpg)
(原文件名:4--显示图片.jpg)
下面的几张图片就是这几个语句中显示的,从中可以看出,可以显示不同目录和名称的图片。同时这个函数可以自根据限定显示区域自动布局,缩放显示。
(原文件名:ourdev_612947.jpg)
(原文件名:4-1.jpg)
(原文件名:ourdev_612948.jpg)
(原文件名:4-2.jpg)
(原文件名:ourdev_612949.jpg)
(原文件名:4-3.jpg)
(原文件名:ourdev_612950.jpg)
(原文件名:4-4.jpg)
(原文件名:ourdev_612951.jpg)
(原文件名:4-5.jpg)
(原文件名:ourdev_612952.jpg)
(原文件名:4-6.jpg)
目前尚未实现长文件名。我本来是打算编写一个简单的读写程序,以便在单片机系统上也可以简单实用,可是由于没规划好,后来竟写成这样了比起复杂的来说,功能太简单,比起简单的来说,太麻烦。个人觉得如果是单片机上,没必要实现太复杂的缓冲,以及多级目录,甚至有的只需要读,连写和创建删除都没必要。所以这实在是高不成低不就的垃圾,仅仅供学习使用,没事么实际用处。欢迎任意复制,修改!
本贴被 superyongzhe 编辑过,最后修改时间:2009-02-07,01:27:24.
__________________________
大自然遵循着等价交换的不原则,如果不付出便什么也得不到。
2009-02-07,00:18:16 资料 邮件 本主题状态:等待审核 编辑 删除
【1楼】 pl30508
积分:21
派别:
等级:------
来自:
太感谢了
2009-02-07,09:45:35 资料 邮件 本回复状态:等待审核 编辑 删除
【2楼】 eiffel
积分:24
派别:
等级:------
来自:
顶一个,做得实在不错.
2009-02-07,09:53:31 资料 邮件 本回复状态:等待审核 编辑 删除
【3楼】 iam35200
积分:39
派别:
等级:------
来自:
MARK
2009-02-07,11:36:15 资料 邮件 本回复状态:等待审核 编辑 删除
【4楼】 kugel
积分:130
派别:
等级:------
来自:
顶,不错的东西
__________________________
http://shop36261348.taobao.com
PowerPC开发板、STM32开发板
Altera USB Blaster
2009-02-07,12:24:25 资料 邮件 本回复状态:等待审核 编辑 删除
【5楼】 wanghm35
积分:336
派别:
等级:------
来自:
不错!
2009-02-07,12:42:34 资料 邮件 本回复状态:等待审核 编辑 删除
【6楼】 superyongzhe 最后的骑士
积分:147
派别:
等级:------
来自:卡里姆多
(原文件名:ourdev_613290.jpg)
(原文件名:5--工程.jpg)
工程目录讲解:
Main --主程序,包括系统硬件的初始化,及GUI,FS等的初始化。
MyApp --应用程序,主要是基于GUI,FS,DataAccess,SystemTool和驱动编写的应用程序。这里面有俄罗斯方块游戏机
RussiaBlock,电子琴Orgatron,贪吃蛇Snake(未完成),图片浏览器PicViewer。
SystemTool --包括串口界面ComShell,串口和USB下载Download,NandFlash和NorFlash烧写的SysProg,以及从Nand启动系统的
SysBoot,提供系统时钟节拍和定时Tick的SysTime,实现按键和触摸屏系统输入的SysInput,实现基于窗口消息的桌面
系统SysWindow。
DataAccess --基于EasyFS的特定格式文件读写,创建。目前实现了文本文件和24位BMP图片。
EasyFS --包含了FAT16文件系统的读写程序。
EasyGUI --各种各样的图形绘制和字体显示。
Drives --包含开发板上的各种驱动,包括SD卡的驱动SDI,串口驱动UART,液晶驱动LCD等等。
这里面几乎包含了ARM裸机的大部分程序,可以做出很好玩的东西,比如mp3,只要再把声音和mp3解码搞定就可以了。由于有输入输出及窗口机制,做游戏机程序也很简单,比如我已经做成功的俄罗斯方块。如果不是这个开发板也可以很容易移植,里面的每个模块都是很独立的,我主要是没有时间写文档,要不然你很发现这些程序很好移植。
__________________________
大自然遵循着等价交换的不原则,如果不付出便什么也得不到。
2009-02-07,13:14:08 资料 邮件 本回复状态:等待审核 编辑 删除
【7楼】 superyongzhe 最后的骑士
积分:147
派别:
等级:------
来自:卡里姆多
(原文件名:ourdev_613327.jpg)
(原文件名:5-1 FS.jpg)
EasyFS各个文件说明:
EF_Disk --主要管理物理磁盘驱动,包括初始化退出,读写,向上提供一个个逻辑磁盘如,首次添加的磁盘就是磁盘“A”,以此
类推,因此这个FS可以同时操作多个物理磁盘,Flash等等。
EF_Cache --实现FS的RAM缓冲,减少磁盘访问次数,向上提供磁盘的Cache的读写,隐藏真实磁盘的读写。
EF_FAT --实现FAT表的读写,目前只支持FAT16。
EF_FDT --实现FDT表的读写,查找等,支持多级目录。
EF_Dir --实现多级目录和文件的读写和查找。
EF_File --实现多级目录文件的读写。
原则上,应用程序只可以调用EF_Dir.c,EF_File.c和EasyFS.c中的部分函数,其他的函数只能在内部使用。
EasyFS的使用步骤如下:
1:编写驱动程序,如下
static uint32 EF_MyDisk(uint32 uiCommand, void *pvParameter)
{
accessparam *pstParam=pvParameter;
switch(uiCommand)
{
case EF_DISK_INIT://初始化
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(!SDI_Init())
{
UART_TextOut("SD Card Initialized fail(Press any key to exit)\n");
UART_GetChar();
return EF_DISK_ERROR;
}
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case EF_DISK_READ://读一个扇区,512byte。
SDI_Read(pstParam->uiIndex,1,pstParam->pucBuffer);break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case EF_DISK_WRITE://写一个扇区,区中的uiIndex是磁盘的绝对扇区号。
SDI_Write(pstParam->uiIndex,1,pstParam->pucBuffer);break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
case EF_DISK_EXIT:break;//
default:break;
}
return EF_DISK_OK;
}
2:初始化,添加驱动到FS中。
uint32 EF_Init(void)
{
uint8 ucDisk;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Initialize the logic disk.
EF_DiskInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Initialize the cache.
EF_CacheInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//Initialize the file struct.
EF_FileInit();
//以上无需改动。
//******************************************************************************************************
//Add Memory Device Driver.
//******************************************************************************************************
ucDisk=EF_AddDisk(EF_MyDisk);//添加驱动到FS中。
if(ucDisk==EF_DISK_ERROR)
{
UART_TextOut("Disk %d cannot Add!\n",ucDisk);
return EF_ERROR;
}
UART_TextOut("Disk %d is Add!\n",ucDisk);
return EF_OK;
}
3:文件目录的存取
有OpenFile,CloseFile,ReadFile,WriteFile等。必须遵循先打开,再读写,最后关闭的步骤。
本贴被 superyongzhe 编辑过,最后修改时间:2009-02-07,13:31:04.
__________________________
大自然遵循着等价交换的不原则,如果不付出便什么也得不到。
2009-02-07,13:26:51 资料 邮件 本回复状态:等待审核 编辑 删除
【8楼】 eeyrw
积分:353
派别:
等级:------
来自:
支持FAT32不?
__________________________
http://hi.baidu.com/ecfan
来一来,看一看,走过路过,不要错过。。。
2009-02-07,14:59:10 资料 邮件 本回复状态:等待审核 编辑 删除 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|