?? osfile.c
字號(hào):
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_MakeDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函數(shù)名稱: OSRemoveDir
** 功能描述: 刪除目錄
**
** 輸 入: Path:絕對(duì)路徑名
**
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說明
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSRemoveDir(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_RemoveDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函數(shù)名稱: OSChangeDir
** 功能描述: 改變當(dāng)前目錄
**
** 輸 入: Path:路徑名
**
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說明
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSChangeDir(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_ChangeDir, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函數(shù)名稱: OSGetDrive
** 功能描述: 獲取指定目錄的驅(qū)動(dòng)器
**
** 輸 入: Path:路徑名
**
** 輸 出: 驅(qū)動(dòng)器號(hào)
**
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSGetDrive(char *Path)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Path;
Together(OS_GetDrive, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************
** 函數(shù)名稱: OSChangeDrive
** 功能描述: 改變當(dāng)前邏輯盤
**
** 輸 入: Drive:邏輯盤符字符串
**
** 輸 出: RETURN_OK:成功
** NOT_FIND_DISK:邏輯盤不存在
** PARAMETER_ERR:非法參數(shù)
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSChangeDrive(char *Drive)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.cp = Drive;
Together(OS_ChangeDrive, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函數(shù)名稱: OSGetFDTInfo
** 功能描述: 獲取指定目錄指定文件(目錄)信息
**
** 輸 入: Rt:存儲(chǔ)返回信息的指針
** Drive:驅(qū)動(dòng)器號(hào)
** ClusIndex:目錄首簇號(hào)
** Index:文件(目錄)在FDT中的位置
** 輸 出: RETURN_OK:成功
** 其它參考fat.h中關(guān)于返回值的說明
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSGetFDTInfo(FDT *Rt,uint8 Drive, uint32 ClusIndex, uint32 Index)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Pvp= (void *)Rt;
Temp.P2.Puint8= Drive;
Temp.P3.Puint32= ClusIndex;
Temp.P4.Puint32= Index;
Together(OS_GetFDTInfo, NOT_RUN, Temp.P1.Puint8);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函數(shù)名稱: OSAddFileDriver
** 功能描述: 增加一個(gè)底層驅(qū)動(dòng)程序
**
** 輸 入: DiakCommand:驅(qū)動(dòng)程序接口函數(shù)
**
** 輸 出: NOT_RUN:沒有執(zhí)行
** RETURN_OK:執(zhí)行成功
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSAddFileDriver(uint16 (* DiakCommand)(uint8 Cammand, void *Parameter))
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Pvp = (void *)DiakCommand;
Together(OS_AddFileDriver, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************
** 函數(shù)名稱: OSRemoveFileDriver
** 功能描述: 刪除一個(gè)底層驅(qū)動(dòng)程序
**
** 輸 入: Drive:邏輯驅(qū)動(dòng)器號(hào)
**
** 輸 出: 無
**
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSRemoveFileDriver(uint8 Drive)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Temp.P1.Puint8 = Drive;
Together(OS_RemoveFileDriver, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函數(shù)名稱: OSAllCacheWriteBack
** 功能描述: 把所有已改變的扇區(qū)寫回邏輯盤
**
** 輸 入: 無
**
** 輸 出: NOT_RUN:沒有執(zhí)行
** RETURN_OK:執(zhí)行成功
**
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSAllCacheWriteBack(void)
{
OSFileParameter Temp;
uint8 err, ThisRt;
Together(OS_AllCacheWriteBack, NOT_RUN, RETURN_OK);
}
/*********************************************************************************************************/
/*********************************************************************************************************
** 函數(shù)名稱: OSFileTask
** 功能描述: 文件系統(tǒng)服務(wù)任務(wù)
**
** 輸 入: 無
**
** 輸 出: 無
**
** 全局變量:
** 調(diào)用模塊: OSQPost
**
** 作 者: 陳明計(jì)
** 日 期: 2003年12月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陳明計(jì)
** 日 期: 2004年3月11日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void OSFileTask(void *pdata)
{
uint8 err;
uint16 CacheIndex;
OSFileParameter *Command;
extern Disk_cache DiskCache[MAX_DISK_CACHES];
pdata = pdata;
DiskInit(); /* 初始化磁盤管理模塊 */
FileInit(); /* 初始化文件系統(tǒng) */
FileCommad = OSQCreate(OSFileQ, FILE_Q_SIZE); /* 初始化命令隊(duì)列 */
CacheIndex = 0;
while (1)
{
Command = (OSFileParameter *)OSQPend(FileCommad, 100, &err); /* 等待命令 */
if (err == OS_TIMEOUT)
{
if ((DiskCache[CacheIndex].Flag & CACHE_WRITED) != 0)
{
CacheWriteBack2(CacheIndex); /* 回寫cache */
}
CacheIndex++;
if (CacheIndex >= MAX_DISK_CACHES)
{
CacheIndex = 0;
}
}
if (err == OS_NO_ERR)
{
/* 實(shí)際執(zhí)行各種操作 */
switch(Command->Command)
{
case OS_RemoveFile: /* 刪除文件 */
Command->P1.Puint8 = RemoveFile(Command->P1.cp);
break;
case OS_FileOpen: /* 打開文件 */
Command->P1.Handle = FileOpen(Command->P1.cp, Command->P2.cp);
break;
case OS_FileClose: /* 關(guān)閉文件 */
Command->P1.Puint8 = FileClose(Command->P1.Handle);
break;
case OS_FileGetCh: /* 從文件中讀一個(gè)字節(jié)數(shù)據(jù) */
Command->P1.Puint8 = FileGetCh(Command->P1.ucp, Command->P2.Handle);
break;
case OS_FileRead: /* 從文件中讀數(shù)據(jù) */
Command->P1.Puint32 = FileRead(Command->P1.Pvp, Command->P2.Puint32, Command->P3.Handle);
break;
case OS_FilePutCh: /* 寫一個(gè)直接數(shù)據(jù)到文件 */
Command->P1.Puint8 = FilePutCh(Command->P1.Puint8, Command->P2.Handle);
break;
case OS_FileWrite: /* 寫數(shù)據(jù)到文件 */
Command->P1.Puint32 = FileWrite(Command->P1.Pvp, Command->P2.Puint32, Command->P3.Handle);
break;
case OS_FileCloseAll: /* 關(guān)閉所有文件 */
FileCloseAll();
break;
case OS_FileEof: /* 判斷文件是否結(jié)束 */
Command->P1.Puint8 = FileEof(Command->P1.Handle);
break;
case OS_FileSeek: /* 調(diào)整文件指針 */
Command->P1.Puint8 = FileSeek(Command->P1.Handle, Command->P2.Puint32, Command->P3.Puint8);
break;
case OS_MakeDir: /* 建立目錄 */
Command->P1.Puint8 = MakeDir(Command->P1.cp);
break;
case OS_RemoveDir: /* 刪除空目錄 */
Command->P1.Puint8 = RemoveDir(Command->P1.cp);
break;
case OS_ChangeDir: /* 改變當(dāng)前目錄 */
Command->P1.Puint8 = ChangeDir(Command->P1.cp);
break;
case OS_GetDrive: /* 獲取邏輯盤內(nèi)部表示法 */
Command->P1.Puint8 = GetDrive(Command->P1.cp);
break;
case OS_ChangeDrive: /* 改變當(dāng)前邏輯盤 */
Command->P1.Puint8 = ChangeDrive(Command->P1.cp);
break;
case OS_GetFDTInfo: /* 獲取指定fdt信息 */
Command->P1.Puint8 = GetFDTInfo(Command->P1.Pvp, Command->P2.Puint8, Command->P3.Puint32, Command->P4.Puint32);
break;
case OS_AddFileDriver: /* 增加底層驅(qū)動(dòng) */
AddFileDriver((uint16 (*)(uint8 Cammand, void *Parameter))Command->P1.Pvp);
break;
case OS_RemoveFileDriver: /* 刪除底層驅(qū)動(dòng) */
RemoveFileDriver(Command->P1.Puint8);
break;
case OS_AllCacheWriteBack: /* 同步cache與邏輯盤 */
AllCacheWriteBack();
break;
default:
Command->P1.Puint8 = BAD_COMMAND;
break;
}
}
OSMboxPost(Command->Rt, (void *)1); /* 返回操作結(jié)果 */
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -