📄 fs_test.c
字号:
/****************************************************************************
【文 件 名 称】FS_Test.C
【功 能 描 述】三星S3C44B0X板demo程序代码
【程 序 版 本】4.0
【创建人及创建日期】龚俊//2002年11月19日19:26
【修改人及修改日期】龚俊//2005-2-18 13:55
****************************************************************************/
//***************************************************************************
#include "44b.h"
#include "config.h"
//***************************************************************************
HANDLE FHandle1,FHandle2;
void Test_File_System(void)
{
U8 err ;
S8 FHandle;
U8 buf[512];
char S[80];
U16 i;
char *FileName = "a:\\arm.txt" ;
char WritFileData[] = "\r\nARM File system test for fat12, fat16, fat32\r\n" ;
rNCACHBE1 = ((unsigned int)(0xc700000>>12)<<16)|(download_addr>>12);
Uart_Printf("\n");
SYS_BusIni(); //ATA总线初始化
ATA_INI(); //ATA设备初始化
AddFileDriver( CFCammand ); //加载设备驱动
DiskInit(); //初始化磁盘管理模块
FileInit(); //初始化文件系统
// FATGetNextClus(0, 0); //返回FAT表指定簇的下一个簇号
// FATGetNextClus(0, 1);
err = Format(0, 512, 512); //格式化磁盘
if( err != RETURN_OK ) Uart_Printf( "\t\tFormat操作失败,错误代码0x%0x\n", err ) ;
FHandle = FileOpen(FileName, "rw");
if( FHandle == Not_Open_FILE ) Uart_Printf( "\t\tFileOpen操作失败,错误代码0x%0x\n", FHandle ) ;
err = FileSeek(FHandle,0, SEEK_END);
if( err != RETURN_OK ) Uart_Printf( "\t\tFileSeek操作失败,错误代码0x%0x\n", err ) ;
err = FileWrite(WritFileData, sizeof(WritFileData), FHandle);
if( err != RETURN_OK ) Uart_Printf( "\t\tFileWrite操作失败,错误代码0x%0x\n", err ) ;
err = FileClose(FHandle);
if( err != RETURN_OK ) Uart_Printf( "\t\tFileClose操作失败,错误代码0x%0x\n", err ) ;
err = MakeDir("a:\\ARM_FS");
if( err != RETURN_OK ) Uart_Printf( "\t\tMakeDir操作失败,错误代码0x%0x\n", err ) ;
AllCacheWriteBack();
RemoveFileDriver(0);
for (i = 0; i < 64; i++)
{
Uart_Printf("\ta:\\%03d.txt", i);
RemoveFile(S);
FHandle = FileOpen(S, "w");
FileSeek(FHandle, 0, SEEK_END);
S[19] = 0x0d;
S[20] = 0x0a;
FileWrite(S, 21, FHandle);
FHandle1 = FileOpen(S, "w");
FHandle2 = FileOpen(S, "r");
FileRead(buf, 16, FHandle2);
buf[3] = 0;
FileRead(buf, 3, FHandle2);
buf[13] = 0;
FileRead(buf, 13, FHandle2);
FHandle = FileOpen(S, "r");
FileRead(buf, 16, FHandle);
buf[3] = 0;
FileRead(buf, 3, FHandle);
buf[13] = 0;
FileRead(buf, 13, FHandle);
FileClose(FHandle);
}
ChangeDrive("a:");
MakeDir("a:\\.\\dir2");
ChangeDir("dir2");
MakeDir("a:\\..\\dir3");
MakeDir("a:..\\dir4");
MakeDir("..\\dir5");
MakeDir("\\dir6");
MakeDir("\\.\\..\\dir7");
MakeDir("\\.\\dir8");
MakeDir("a:\\.\\dir9");
MakeDir(".\\dir10");
MakeDir("dir11");
for (i = 0; i < 64; i++)
{
Uart_Printf("\ta:\\%03d.dir", i);
MakeDir(S);
RemoveDir(S);
}
ChangeDrive("a:");
MakeDir("dir2.dir");
ChangeDir("a:\\dir2.dir");
MakeDir("dir3.dir");
ChangeDir("dir3.dir");
MakeDir("dir4.dir");
ChangeDir("\\");
MakeDir("a:\\dir2.dir\\dir3.dir\\dir4.dir\\dir5.dir");
ChangeDir("a:\\dir2.dir\\dir3.dir\\dir4.dir");
RemoveDir("dir5.dir");
ChangeDir("..");
RemoveDir("dir4.dir");
ChangeDir("a:\\");
RemoveDir("a:\\dir2.dir\\dir3.dir");
RemoveDir("dir2.dir");
AllCacheWriteBack();
RemoveFileDriver(0);
Uart_Printf("\nPress ESC key to exit\n");
while( getkey() != ESC_KEY ) ;
rNCACHBE1 = ((unsigned int)(Non_Cache_End1>>12)<<16)|(Non_Cache_Start1>>12);
}
void Test_File_System_No_Used( void )
{
U8 com_key ;
U8 err_U8 ;
U32 err_U32 ;
S8 FHandle;
U8 fs_buf[128] ;
char name_buf[128] ;
char *FileName = "a:\\arm.txt" ;
char WritFileData[] = "\r\nARM File system test for fat12, fat16, fat32\r\n" ;
// extern Disk_cache DiskCache[MAX_DISK_CACHES];
rNCACHBE1 = ((unsigned int)(0xc700000>>12)<<16)|(download_addr>>12);
Uart_Printf("\n");
SYS_BusIni(); //ATA总线初始化
ATA_INI(); //ATA设备初始化
AddFileDriver( CFCammand ); //加载设备驱动
DiskInit(); //初始化磁盘管理模块
FileInit(); //初始化文件系统
Uart_Printf( "\nFile system test, Please press'a~e' to test,press ESC key to exit !\n" ) ;
while( (com_key=getkey()) != ESC_KEY )
{
switch( com_key ) //实际执行各种操作
{
case 'a': //删除文件
err_U8 = RemoveFile( "arm.txt" );
if( err_U8 != RETURN_OK ) Uart_Printf( "\t\tFileSeek操作失败,错误代码0x%0x\n", err_U8 ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'b': //打开文件
FHandle = FileOpen(FileName, "rw");
if( FHandle == Not_Open_FILE ) Uart_Printf( "\t\tFileOpen操作失败,错误代码0x%0x\n", FHandle ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'c': //关闭文件
err_U8 = FileClose(FHandle);
if( err_U8 != RETURN_OK ) Uart_Printf( "\t\tFileClose操作失败,错误代码0x%0x\n", err_U8 ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'd': //从文件中读一个字节数据
err_U8 = FileGetCh( fs_buf, FHandle );
break;
case 'e': //从文件中读数据
err_U32 = FileRead( fs_buf, 64, FHandle );
break;
case 'f': //写一个直接数据到文件
err_U8 = FilePutCh( 'U', FHandle );
break;
case 'g': //写数据到文件
err_U32 = FileWrite( WritFileData, 16, FHandle );
if( err_U32 != RETURN_OK ) Uart_Printf( "\t\tFileWrite操作失败,错误代码0x%0x\n", err_U32 ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'h': //关闭所有文件
FileCloseAll();
break;
case 'i': //判断文件是否结束
err_U8 = FileEof( FHandle );
break;
case 'j': //调整文件指针
err_U8 = FileSeek( FHandle,0, SEEK_END );
if( err_U8 != RETURN_OK ) Uart_Printf( "\t\tFileSeek操作失败,错误代码0x%0x\n", err_U8 ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'k': //建立目录
err_U8 = MakeDir( "a:\\ARM_FS" ) ;
if( err_U8 != RETURN_OK ) Uart_Printf( "\t\tMakeDir操作失败,错误代码0x%0x\n", err_U8 ) ;
else Uart_Printf( "\t\t本操作成功!\n") ;
break;
case 'l': //删除空目录
err_U8 = RemoveDir( "a:\\ARM_FS" ) ;
break;
case 'm': //改变当前目录
err_U8 = ChangeDir( "a:\\ARM_FS_2" ) ;
break;
case 'n': //获取逻辑盘内部表示法
err_U8 = GetDrive( name_buf );
break;
case 'o': //改变当前逻辑盘
err_U8 = ChangeDrive( name_buf );
break;
//case 'p': //获取指定fdt信息
//err_U8 = GetFDTInfo(Command->P1.Pvp, Command->P2.Puint8, Command->P3.Puint32, Command->P4.Puint32);
//break;
case 'q': //增加底层驱动
AddFileDriver( CFCammand );
break;
case 'r': //删除底层驱动
RemoveFileDriver( 0 );
break;
case 's': //同步cache与逻辑盘
AllCacheWriteBack();
break;
default:
err_U8 = BAD_COMMAND;
break;
}
}
rNCACHBE1 = ((unsigned int)(Non_Cache_End1>>12)<<16)|(Non_Cache_Start1>>12);
}
static char title[] = "文件系统实验";
static char tip[] = "实验磁盘格式化,文件系统建立和使用,按ESC键退出";
//Test_StepMotorItem在prog_entry.c里被引用
TEST_PROGRAM_ITEM Test_File_SystemItem = {
(TEST_PROGRAM)Test_File_System, //入口地址
title, //显示名称
tip, //帮助或提示信息,可为NULL
1}; //使用Uart_Printf,puts,putch等函数时在LCD上也显示输出字符(串)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -