/****************************************************************************
* Function Name : GUI_FontUpdate
* Description : 更新字库
* Input : updateState:选择更新的字库
* Output : None
* Return : None
****************************************************************************/
void GUI_FontUpdate(uint8_t updateState)
{
FRESULT res;
FIL fsrc;
UINT br;
uint32_t wordAddr, i, j;
#ifdef __MALLOC_H
uint8_t *p;
p = malloc(4096); //开辟一个内存块
if(p == 0)
{
return;
}
#else
uint8_t buffer[512];
#endif
/* 更新ASCII字库 */
if((updateState & GUI_UPDATE_ASCII) == GUI_UPDATE_ASCII)
{
/* 设置写入起始地址 */
wordAddr = GUI_FLASH_ASCII_ADDR;
j = 0;
/* 打开读取文件 */
res = f_open(&fsrc, GUI_ASCII_FILE, FA_READ);
if(res == FR_OK) //打开成功
{
for (;;) //开始读取数据
{
#ifdef __MALLOC_H
res = f_read(&fsrc, p, 4096, &br);
/* 将读取到的数据写入FLASH */
FLASH_WriteData(p, wordAddr, br);
wordAddr += br; //写入地址增加
#else
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
/* 将读取到的数据写入FLASH */
FLASH_WriteData(buffer, wordAddr, br);
wordAddr += br; //写入地址增加
#endif
j += br;
i = j * 100 / 1456;
GUI_Box(0, 80, i, 90, RED);
if (res || br == 0)
{
break; // error or eof
}
}
}
f_close(&fsrc); //不论是打开,还是新建文件,一定记得关闭
}
/* 更新12号汉字库 */
if((updateState & GUI_UPDATE_12CHAR) == GUI_UPDATE_12CHAR)
{
wordAddr = GUI_FLASH_12CHAR_ADDR;
j = 0;
res = f_open(&fsrc, GUI_12CHAR_FILE, FA_READ);
if(res == FR_OK)
{
for (;;)
{
#ifdef __MALLOC_H
res = f_read(&fsrc, p, 4096, &br);
/* 将读取到的数据写入FLASH */
FLASH_WriteData(p, wordAddr, br);
wordAddr += br; //写入地址增加
#else
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
FLASH_WriteData(buffer, wordAddr, br);
wordAddr += br;
#endif
j += br;
i = j * 100 / 766080;
GUI_Box(0, 95, i, 105, RED);
if (res || br == 0)
{
break; // error or eof
}
}
}
f_close(&fsrc); //不论是打开,还是新建文件,一定记得关闭
}
/* 更新16号汉字库 */
if((updateState & GUI_UPDATE_16CHAR) == GUI_UPDATE_16CHAR)
{
wordAddr = GUI_FLASH_16CHAR_ADDR;
j = 0;
res = f_open(&fsrc, GUI_16CHAR_FILE, FA_READ);
if(res == FR_OK)
{
for (;;)
{
#ifdef __MALLOC_H
res = f_read(&fsrc, p, 4096, &br);
/* 将读取到的数据写入FLASH */
FLASH_WriteData(p, wordAddr, br);
wordAddr += br; //写入地址增加
#else
res = f_read(&fsrc, buffer, sizeof(buffer), &br);
FLASH_WriteData(buffer, wordAddr, br);
wordAddr += br;
#endif
j += br;
i = j * 100 / 1508220;
GUI_Box(0, 110, i, 120, RED);
if (res || br == 0)
{
break; // error or eof
}
}
}
f_close(&fsrc); //不论是打开,还是新建文件,一定记得关闭
}
#ifdef __MALLOC_H
free(p);
#endif
}
#endif
|