📄 relist.c
字号:
//====================================================================================
//文件名:relist.c
//功能:读索引表
//日期:2005.04.06
//====================================================================================
#define ROOT_ADDR 0x30000
unsigned int SP_ExtractSamsungFlash(void);
//------------------------------------------------------------------------------------
//索引表结构
//------------------------------------------------------------------------------------
typedef struct
{
unsigned BookCnt;
long BookIdx_Addr;
}ROOT_HEAD;
typedef struct
{
unsigned PageCnt;
long PageIdx_Addr;
}BOOK_IDX;
typedef struct
{
long Text_StartAddr;
long Text_EndAddr;
long Voice_StartAddr;
long Voice_EndAddr;
}PAGE_IDX;
//----------------------------------------------------------------------------------------
//========================================================================================
//函数名:Flash_ReadDWord()
//功能:读一个双字
//参数:Addr
//返回值:(Ret2<<16)+(Ret&0x0000ffff)
//日期:2005.04.06
//========================================================================================
unsigned long Flash_ReadDWord(long Addr)
{
unsigned int Block,Page,Column,i;
unsigned long Ret,Ret2;
Block = Addr>>14; //
Page = (Addr&0x3fff)>>9; //
Column = (Addr&0x1ff); //根据地址计算块、页和页内地址
//-----------------------------------------------------------------------
//初始化
System_Initial();
InitSignalLine();
SP_InitSamsungFlash();
//------------------------------------------------------------------------
//edit by hongyan
//------------------------------------------------------------------------
Ret = SP_SamsungReadWord_1(Column,Page,Block); //取双字的低位字
Ret2 = SP_SamsungReadWord_1(Column+2,Page,Block); //取双字的高位字
return (Ret2<<16)+(Ret&0x0000ffff); //返回双字
}
//==========================================================================================//
//函数名: Flash_ReadWord()
//功能:读一个字
//参数:Data_Addr
//返回值:Back_Data
//日期:2005.04.06
//==========================================================================================//
unsigned int Flash_ReadWord(long Data_Addr)
{
unsigned int Column,Block,Page;
unsigned int Back_Data;
Column = (unsigned int)Data_Addr&0x000001ff; //
Page = (unsigned int)(Data_Addr>>9)&0x001f; //
Block = (unsigned int)((Data_Addr>>8)>>6)&0x0fff; //根据地址计算块、页和页内地址
Back_Data = SP_SamsungReadWord_1(Column,Page,Block); //取一个字
return Back_Data; //返回取出值
}
//===========================================================================================================================================
//函数名称:SearchSnd()
//功能:读索引表
//参数;uiBookIdx、uiPageIdx、*Text_StartAddr、*Text_EndAddr、*Voice_StartAddr、*Voice_EndAddr
//返回值:*Text_StartAddr、*Text_EndAddr、*Voice_StartAddr、*Voice_EndAddr
//日期:2004.04.05
//===========================================================================================================================================
unsigned SearchSnd(unsigned uiBookIdx ,unsigned uiPageIdx,long *Text_StartAddr,long *Text_EndAddr,long *Voice_StartAddr,long *Voice_EndAddr)
{
unsigned uiTemp;
unsigned TempAddrLow,TempAddrHigh;
long BookIdxAddr,PageIdxAddr,PageAddr;
BookIdxAddr = Flash_ReadDWord(ROOT_ADDR + 2); //得到书索引地址
PageIdxAddr = Flash_ReadDWord(BookIdxAddr + uiBookIdx * sizeof(BOOK_IDX)*2 + 2); //
PageIdxAddr = PageIdxAddr + uiPageIdx*sizeof(PAGE_IDX)*2; //得到页索引地址
*Text_StartAddr = Flash_ReadDWord(PageIdxAddr); //得到文本初始地址
*Text_EndAddr = Flash_ReadDWord(PageIdxAddr + 4); //得到文本结束地址
*Voice_StartAddr = Flash_ReadDWord(PageIdxAddr + 8); //得到语音起始地址
*Voice_EndAddr = Flash_ReadDWord(PageIdxAddr + 12); //得到语音结束地址
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -