📄 file.c
字号:
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 + -