⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs_test.c

📁 该原码包含有wince 和 linux 的移植和应用原码
💻 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 + -