//获取系统文件的存储地址 //次步出错,则无法启动!!! //返回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;//成功 }
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;//成功 }