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

📄 file.c

📁 一个简单而又高效的嵌入式操作系统.包括GUI及文件系统.仿Windows设计,类似于MFC风格
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(comp_filename(&root_buf[Pointer][0],pucFileName)==0)
		break;
	}
	return(Pointer);

}
//------------------------------------------------------------------
// 函数名:INT32U FlashWriteFile(INT8U *pucFileName, INT8U *pucFileBuf, INT32U ulFileLen, INT32U ulFlag)
// 输 入: INT8U *pucFileName --文件名
//		INT8U *pucFileBuf--缓冲区指针
//		INT32U ulFileLen--长度
//		INT32U ulFlag--Not really used now
// 输 出: 1--成功
//		0--失败,该文件已经存在
// 功能描述:将缓冲区ulFileLen长的一段写入文件
// 全局变量:Null
//------------------------------------------------------------------
INT32U FlashWriteFile(INT8U *pucFileName, INT8U *pucFileBuf, INT32U ulFileLen, INT32U ulFlag)
{
	INT32U i,ulBlockNum,ulRootLocation;
	INT8U pucFileInfo[32];
	ulRootLocation=find_file(pucFileName);
	if(ulRootLocation!=FILE_NO_FOUND)
		return 0;				//This file is already exist!
	else
	{
		ulBlockNum=ulFileLen/(16*1024);
		if((ulFileLen%(16*1024))!=0)
			ulBlockNum++;
		for(i=0;i<32;i++)	//copy the file name
		{
			pucFileInfo[i]=*pucFileName++;
		}
		pucFileInfo[31]=ulFileLen/16777216;	ulFileLen%=16777216;
		pucFileInfo[30]=ulFileLen/65536;	ulFileLen%=65536;
		pucFileInfo[29]=ulFileLen/256;		ulFileLen%=256;
		pucFileInfo[28]=ulFileLen;
		creat_file(pucFileInfo);	//将文件信息添加到Root information
		for(i=0;i<ulBlockNum;i++)
		{
			if(i==(ulBlockNum-1))
				write_file(1,pucFileBuf);
			else
				write_file(0,pucFileBuf);
			pucFileBuf+=16*1024;
		}
		close_file();			////将修改后的Root information写回Block0
		return 1;
	}
}
//------------------------------------------------------------------
// 函数名:INT32U FlashFileSize(INT8U *pucFileName)
// 输 入: INT8U *pucFileName --文件名
// 输 出: 文件长度
// 功能描述:获取文件大小
// 全局变量:root_buf
//------------------------------------------------------------------
INT32U FlashFileSize(INT8U *pucFileName)
{
	INT32U ulRootLocation,ulFileSize;
	ulRootLocation=find_file(pucFileName);
	if(ulRootLocation==FILE_NO_FOUND)
		return 0;
	else
	{
		//get the file first cluster//
		current_block=root_buf[ulRootLocation][27]*256+root_buf[ulRootLocation][26];
		//get the file size
		ulFileSize=root_buf[ulRootLocation][28]+
				root_buf[ulRootLocation][29]*256+
				root_buf[ulRootLocation][30]*65536+
				root_buf[ulRootLocation][31]*65536*256;
	}
	return ulFileSize;
}
//------------------------------------------------------------------
// 函数名:INT32U FlashReadFile(INT8U *pucFileName, INT8U * pucFileBuf)
// 输 入: INT8U *pucFileName --文件名
//		INT8U *pucFileBuf--缓冲区指针
// 输 出: 1--成功
//		0--失败,找不到该文件
// 功能描述:读取整个文件到缓冲区中
// 全局变量:Null
//------------------------------------------------------------------
INT32U FlashReadFile(INT8U *pucFileName, INT8U * pucFileBuf)
{
	INT32U ulRootLocation;
	INT32 lFileSize;
	ulRootLocation=find_file(pucFileName);
	
	if(ulRootLocation==FILE_NO_FOUND)
		return 0;
	else
	{
		//get the file first cluster//
		current_block=root_buf[ulRootLocation][27]*256+root_buf[ulRootLocation][26];
		//get the file size
		lFileSize=root_buf[ulRootLocation][28]+
				root_buf[ulRootLocation][29]*256+
				root_buf[ulRootLocation][30]*65536+
				root_buf[ulRootLocation][31]*65536*256;
		while(1)
		{
			if(lFileSize<=0)
				break;
			else if(lFileSize<(16*1024))
				read_file(pucFileBuf,lFileSize);
			else
				read_file(pucFileBuf,16*1024);
			pucFileBuf+=16*1024;	//point to next 16KB area
			lFileSize-=16*1024;
			current_block=Page_Buf[512+14]*256+Page_Buf[512+15];
			if(current_block==LAST_BLOCK)
				break;	
		}
		return 1;
	}
}
//------------------------------------------------------------------
// 函数名:INT32U FlashFormat(void)
// 输 入: Null
// 输 出: 1--成功
//		0--失败,找不到该文件
// 功能描述:格式化Flash
// 全局变量:Page_Buf
//------------------------------------------------------------------
INT32U FlashFormat(void)
{
	static INT8U VerfyBuf[528];

	INT32U ulBlockNum,ulPageNum,Pointer;

	/*擦除数据区*/
	for(ulBlockNum=Start_Cluster;ulBlockNum<=End_Cluster;ulBlockNum++)
	{
		if(Erase_Block(ulBlockNum)==0)
		{
			/*Mark this Block with BAD flag*/
			Page_Buf[512]=0x00;
			WritePage(ulBlockNum,0,&Page_Buf[0]);
		}
	}
	//verfiy if all data is 0xff
/*	for(ulBlockNum=Start_Cluster;ulBlockNum<=End_Cluster;ulBlockNum++)
	{
		for(ulPageNum=0;ulPageNum<32;ulPageNum++)
		{
			ReadPage(ulBlockNum,ulPageNum,VerfyBuf);
			for(Pointer=0;Pointer<512;Pointer++)
			{
				if(VerfyBuf[Pointer]!=0xff)
					Pointer++;
			}
		}
	}
	*/	
	
	//将root_buf中全部写0x00//
	for(ulPageNum=0;ulPageNum<32;ulPageNum++)
	{
		for(Pointer=0;Pointer<512;Pointer++)
		{
			Page_Buf[Pointer]=0;
		}
		//独立区以0xFF填充//
		for(Pointer=512;Pointer<(512+16);Pointer++)
		{
			Page_Buf[Pointer]=0xFF;
		}
		WritePage(Root_Cluster,ulPageNum,&Page_Buf[0]);
	}
	return 1;
}
//------------------------------------------------------------------
// 函数名:INT32U FlashRenameFile(INT8U *pucNewOldFileName)
// 输 入: INT8U *pucNewOldFileName--文件名
// 输 出: 1--成功
//		0--失败,找不到该文件
// 功能描述:修改文件名
// 全局变量:root_Buf
//------------------------------------------------------------------
INT32U FlashRenameFile(INT8U *pucNewOldFileName)
{
	INT32U Pointer,i;
	Pointer=find_file(pucNewOldFileName);
	if(Pointer==FILE_NO_FOUND)
		return 0;
	else
	{
		for(i=0;i<11;i++)
			root_buf[Pointer][i]=pucNewOldFileName[11+i];
		close_file();
		return 1;
	}
}
//------------------------------------------------------------------
// 函数名:INT32U FlashDelFile(INT8U *pucFileName)
// 输 入: INT8U *pucFileName--文件名
// 输 出: 1--成功
//		0--失败,找不到该文件
// 功能描述:删除文件
// 全局变量:root_Buf
//------------------------------------------------------------------
INT32U FlashDelFile(INT8U *pucFileName)
{
	INT32U ulRootLocation,i;

    // get the location of this file via look for its file name in Root Directory //
	ulRootLocation=find_file(pucFileName);
	
	if(ulRootLocation==FILE_NO_FOUND)
		return 0;
	else
	{
		//get the file first cluster//
		current_block=root_buf[ulRootLocation][27]*256+root_buf[ulRootLocation][26];

		//flush this file's recoder in root information//
		for(i=0;i<32;i++)
			root_buf[ulRootLocation][i]=0;
		while(1)
		{
			ReadPage(current_block,0,Page_Buf);
			Erase_Block(current_block);
			//get the next block number//
			current_block=Page_Buf[512+14]*256+Page_Buf[512+15];
			if(current_block==65535)
				break;
		}
		close_file();
		return 1;
	}
}
//------------------------------------------------------------------
// 函数名:INT32U FlashInit(INT8U *pucFileName)
// 输 入: INT8U *pucFileName--文件名
// 输 出: 1--成功,不会失败
// 功能描述:初始化Flash文件系统
// 全局变量:root_Buf
//------------------------------------------------------------------
INT32U FlashInit(void)
{
	INT32U ulPageNum,Pointer;
	static INT8U pucPageBuf[512+16];
	/*读入Root informatiom*/
	for(ulPageNum=0;ulPageNum<32;ulPageNum++)
	{
		/*将Root information读到root_buf中*/
		ReadPage(Root_Cluster,ulPageNum,pucPageBuf);
		for(Pointer=0;Pointer<512;Pointer++)
		{
			root_buf[ulPageNum*16+Pointer/32][Pointer%32]=pucPageBuf[Pointer];
		}
	}
//	LoadFont();
	return 1;
}
//------------------------------------------------------------------
// 函数名:void LoadFont(void)
// 输 入: Null
// 输 出: Null
// 功能描述:有NandFlash中载入字库
// 全局变量:aucHZK,aucEK
// 注 意: NandFlash中必须要有HZ267616.txt(16*16汉字库)和ASCI4096.txt(16*8字母库)
//        若没有,则可通过USB下载后,将系统重起
//------------------------------------------------------------------
static void LoadFont(void)
{
	INT8U aucHzName[32]={'H','Z','2','6','7','6','1','6','T','X','T'};
	INT8U aucEngName[32]={'A','S','C','I','4','0','9','6','T','X','T'};
	FlashReadFile(aucHzName,aucHZK);
	FlashReadFile(aucEngName,aucEK);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -