Exemple #1
0
//获取系统文件的存储地址
//次步出错,则无法启动!!!
//返回0,成功。返回其他,错误代码	   
//sel:0 系统文件
//sel:1 图片文件夹
uint8_t SysInfoGet(uint8_t sel)
{			 		   
	uint32_t cluster=0;
	uint32_t syscluster=0;
	uint8_t t=0;	
	FileInfoStruct t_file;  	  						    	 
	//得到根目录的簇号
	if(FAT32_Enable)cluster=FirstDirClust;
	else cluster=0;			   

	if(sel==1)//查找图片文件夹
	{	
		t_file=F_Search(cluster,(unsigned char *)folder[3],T_FILE);//查找PICTURE文件夹
		if(t_file.F_StartCluster==0)return 1;//图片文件夹丢失
		PICCLUSTER=t_file.F_StartCluster;//图片文件夹所在簇号	 
	}else//查找系统文件
	{	
		t_file=F_Search(cluster,(unsigned char *)folder[0],T_FILE);//查找system文件夹
		if(t_file.F_StartCluster==0)return 2;//系统文件夹丢失
		syscluster=t_file.F_StartCluster;//保存系统文件夹所在簇号	  	   
		t_file=F_Search(syscluster,(unsigned char *)folder[2],T_FILE);//在system文件夹下查找SYSICO文件夹
		if(t_file.F_StartCluster==0)return 3; 
		cluster=t_file.F_StartCluster;//保存SYSICO文件夹簇号
		for(t=0;t<9;t++)//查找系统图标,九个
		{
			t_file=F_Search(cluster,(unsigned char *)sysfile[t+7],T_BMP);//在SYSICO文件夹下查找系统图标
			sys_ico[t]=t_file.F_StartCluster;
			if(t_file.F_StartCluster==0)return 4;//失败	
		}
		for(t=3;t<7;t++)//查找文件图标,4个
		{
			t_file=F_Search(cluster,(unsigned char *)sysfile[t],T_BMP);//在SYSICO文件夹下查找文件图标
			file_ico[t-3]=t_file.F_StartCluster;
			if(file_ico[t-3]==0)return 5;//失败 	  
		}
	}
	return 0;//成功
}
//获取系统文件的存储地址
//次步出错,则无法启动!!!
//返回0,成功。返回其他,错误代码	   
//sel:0 系统文件
//sel:1 图片文件夹
u8 SysInfoGet(u8 sel)
{			 		   
	u32 cluster=0;
	FileInfoStruct t_file;  	  						    	 
	//得到根目录的簇号
	if(FAT32_Enable)cluster=FirstDirClust;
	else cluster=0;			   

	if(sel==1)//查找WAV文件夹
	{	
		t_file=F_Search(cluster,(unsigned char *)folder[0],T_FILE);//查找WAV文件夹
		if(t_file.F_StartCluster==0)return 1;//WAV文件夹丢失
		PICCLUSTER=t_file.F_StartCluster;//WAV文件夹所在簇号	 
	}
	return 0;//成功
}
Exemple #3
0
uint8_t Update_Font(void)
{
	uint32_t fcluster=0;	   
	uint32_t i;
	//uint8_t temp[512];  //零时空间	 在这里定义,会内存溢出
	uint32_t tempsys[2];  //临时记录文件起始位置和文件大小
	float prog;
	uint8_t t;		 
	FileInfoStruct FileTemp;//零时文件夹   				    	 
	//得到根目录的簇号
	if(FAT32_Enable)fcluster=FirstDirClust;
	else fcluster=0;			   
	FileTemp=F_Search(fcluster,(unsigned char *)folder[0],T_FILE);//查找system文件夹	  
	if(FileTemp.F_StartCluster==0)return 1;						  //系统文件夹丢失			  
	{	 										 
		//先查找字体
		FileTemp=F_Search(FileTemp.F_StartCluster,(unsigned char *)folder[1],T_FILE);//在system文件夹下查找FONT文件夹
		if(FileTemp.F_StartCluster==0)return 2;//字体文件夹丢失	

		fcluster=FileTemp.F_StartCluster;      //字体文件夹簇号	    
		FileTemp=F_Search(fcluster,(unsigned char *)sysfile[2],T_SYS);//在system文件夹下查找SYS文件
		if(FileTemp.F_StartCluster==0)return 3;//FONT12字体文件丢失	 
		LCD_ShowString1(20,90,"Write UNI2GBK to FLASH...",RED,BLACK);		
		LCD_ShowString1(108,110,"%",RED,BLACK);		
		F_Open(&FileTemp);//打开该文件
		i=0;	  
		while(F_Read(&FileTemp,temp))//成功读出512个字节
		{		 
			if(i<FileTemp.F_Size)//不超过文件大小
			{
				M45PE_Write(temp,i+100000,512);//从100K字节处开始写入512个数据   
				i+=512;//增加512个字节
			}
			prog=(float)i/FileTemp.F_Size;
			prog*=100;
			if(t!=prog)
			{
				t=prog;
				if(t>100)t=100;
				LCD_ShowNum1(84,110,t,3,16);//显示数值
			}					    
		}
		UNI2GBKADDR=100000;//UNI2GBKADDR从100K处开始写入.
		tempsys[0]=UNI2GBKADDR;
		tempsys[1]=FileTemp.F_Size;	 	  //UNI2GBKADDR 大小
		M45PE_Write((uint8_t*)tempsys,0,8);//记录在地址0~7处

		Delay(1000);			    
		//printf("UNI2GBK写入FLASH完毕!\n");
		//printf("写入数据长度:%d\n",FileTemp.F_Size);
		//printf("UNI2GBKSADDR:%d\n\n",UNI2GBKADDR);
		
		FONT16ADDR=FileTemp.F_Size+UNI2GBKADDR;//F16的首地址 
		FileTemp=F_Search(fcluster,(unsigned char *)sysfile[0],T_FON);//在system文件夹下查找FONT16字体文件
		if(FileTemp.F_StartCluster==0)return 4;//FONT16字体文件丢失	 
	
		LCD_ShowString1(20,90,"Write FONT16 to FLASH... ",RED,BLACK);		
 		//printf("开始FONT16写入FLASH...\n");		
		F_Open(&FileTemp);//打开该文件
		i=0;	  
		while(F_Read(&FileTemp,temp))//成功读出512个字节
		{
			if(i<FileTemp.F_Size)//不超过文件大小
			{
				M45PE_Write(temp,i+FONT16ADDR,512);//从0开始写入512个数据   
				i+=512;//增加512个字节
			}
			prog=(float)i/FileTemp.F_Size;
			prog*=100;
			if(t!=prog)
			{
				t=prog;
				if(t>100)t=100;
				LCD_ShowNum1(84,110,t,3,16);//显示数值
			}
		}												   
		tempsys[0]=FONT16ADDR;
		tempsys[1]=FileTemp.F_Size;	 	  //FONT16ADDR 大小
		M45PE_Write((uint8_t*)tempsys,8,8);//记录在地址8~15处
		
		Delay(1000);	    
		//printf("FONT16写入FLASH完毕!\n");
		//printf("写入数据长度:%d\n",FileTemp.F_Size);


		FONT12ADDR=FileTemp.F_Size+FONT16ADDR;//F16的首地址
		//printf("FONT16SADDR:%d\n\n",FONT16ADDR);
		//LCD_ShowString(20,60,"Write FONT12 to FLASH... ");		
		//FONT12暂时不加入
		/*			  
		FileTemp=F_Search(fcluster,(unsigned char *)sysfile[1],T_FON);//在system文件夹下查找FONT12字体文件
		if(FileTemp.F_StartCluster==0)return 5;//FONT12字体文件丢失	 
		printf("开始FONT12写入FLASH...\n");		
		F_Open(&FileTemp);//打开该文件
		i=0;	  
		while(F_Read(&FileTemp,temp))//成功读出512个字节
		{
			if(i<FileTemp.F_Size)//不超过文件大小
			{
				M45PE_Write(temp,i+FONT12ADDR,512);//从0开始写入512个数据   
				i+=512;//增加512个字节
			}
			prog=(float)i/FileTemp.F_Size;
			prog*=100;
			if(t!=prog)
			{
				t=prog;
				if(t>100)t=100;
				LCD_ShowNum(84,80,t,3,16);//显示数值
			}
		}	    
		tempsys[0]=FONT12ADDR;
		tempsys[1]=FileTemp.F_Size;	 	  //FONT16ADDR 大小
		M45PE_Write((uint8_t*)tempsys,16,8);//记录在地址16~23处

		printf("FONT12写入FLASH完毕!\n");
		printf("写入数据长度:%d\n",FileTemp.F_Size);   
		printf("FONT12SADDR:%d\n\n",FONT12ADDR); */
	}
	t=0xBB;
   	M45PE_Write(&t,24,1);//写入字库存在标志	0XAA
	LCD_ShowString1(20,90,"  Font Update Successed  ",RED,BLACK);		    
	Delay(1000);		
	Delay(1000);		
	return 0;//成功
}