<ol id="glfvi"></ol>

    <fieldset id="glfvi"></fieldset>

    1. <mark id="glfvi"></mark>
        <var id="glfvi"></var>

        <big id="glfvi"></big>

        天堂8在线天堂资源BT_一区二区在线 | 国_天堂SV在线最新版在线_97在线观看视频_欧美成人影院在线观看

        機電之家資源網(wǎng)
        單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
        培訓(xùn)信息
        贊助商
        在C51系統(tǒng)上實現(xiàn)YAFFS文件系統(tǒng)
        在C51系統(tǒng)上實現(xiàn)YAFFS文件系統(tǒng)
         更新時間:2008-8-19 13:43:20  點擊數(shù):66
        【字體: 字體顏色
        odSymLink(), mknodSpecial(), Link(), GetAttributes(), GetSymLinkAlias(), root(), LostNFound(), GutsTest(), DumpObject(), GetNumberofFreeChunk(), GetObjectLInkCount()和GetEquivalentObject()。

          然后根據(jù)自己的需要進行數(shù)據(jù)結(jié)構(gòu)修改,與上文提到的目錄操作、操作權(quán)限以及文件連接相關(guān)的數(shù)據(jù)結(jié)構(gòu)(如Uid、Gid、nlink等)對我們來說就沒有意義了,因此需要修改相關(guān)的數(shù)據(jù)結(jié)構(gòu)。為了節(jié)省內(nèi)存,還要修改一些宏定義的數(shù)據(jù)常量,例如同時在運行的句柄數(shù)目和文件名的最大長度等。

          裁減工作最好能在一臺裝有Linux操作系統(tǒng)的機器上進行,可以邊裁減,邊利用模擬方式來檢查是否能實現(xiàn)自己所需的功能。

        3.2 向C51風(fēng)格轉(zhuǎn)化

          YAFFS文件系統(tǒng)是在Linux環(huán)境下利用開發(fā)用戶程序的C語言開發(fā)的。它與C51是有些差別的,主要有:

          ◇ C51不支持__inline__函數(shù)修飾符,可以將其宏定義為空;
          ◇ u8、u16、u32都需要重新宏定義成為C51的數(shù)據(jù)類型unsigned char、unsigned int和unsigned long;
          ◇ off_t定義為long。

          在YAFFS源代碼中有用data和bit作為變量的,而在C51中這些都是關(guān)鍵詞,須將其替換。

          在YAFFS源代碼中yaffs_Device結(jié)構(gòu)體的定義中使用了帶參數(shù)的函數(shù)指針,通過調(diào)用該指針指向的函數(shù)來對Flash硬件進行操作,而C51中通過寄存器函數(shù)指針來調(diào)用函數(shù)不能傳遞實際參數(shù),除非所得參數(shù)可在寄存器間傳遞。因此這里將yaffs_Device結(jié)構(gòu)體定義中的函數(shù)指針去掉,而直接調(diào)用yaffs_if.c中的Flash接口函數(shù)。

          向C51風(fēng)格轉(zhuǎn)化時,最好是在Keil集成開發(fā)環(huán)境中一邊修改,一邊編譯,發(fā)現(xiàn)錯誤后再進行修改。當(dāng)編譯器提示有多個錯誤時,要從第一個錯誤開始修改;可能前面的錯誤修改完畢,后面的錯誤就不再是錯誤了。

        4 C51系統(tǒng)下的YAFFS使用實例

          下面的程序代碼是設(shè)計中的對DBF數(shù)據(jù)庫文件操作的關(guān)鍵代碼。

        yaffs_StartUp();//設(shè)置一些參數(shù),包括各分區(qū)在Flash中的起始塊和結(jié)束塊的地址、預(yù)留塊數(shù)等
        yaffs_mount("/flash"); //YAFFS支持多個分區(qū),這里選擇掛載/flash分區(qū)新建文件db1.dbf
        f=yaffs_open("/flash/db1.dbf", O_CREAT,S_IREAD | S_IWRITE);
        yaffs_close(f);//關(guān)閉文件db1.dbf
        f=yaffs_open("/flash/db1.dbf", O_RDWR,0);//以讀/寫的方式打開文件db1.dbf
        r=yaffs_write(f,"hello",5);//向文件寫數(shù)據(jù)
        yaffs_lseek(f,2,SEEK_SET);//移動文件讀/寫指針
        r=yaffs_write(f,"world",5);
        r=yaffs_lseek(f,0,SEEK_SET);
        r=yaffs_read(f,buffer,10);//從文件讀取數(shù)據(jù)
        r=yaffs_close(f);//關(guān)閉文件db1.dbf
        r=yaffs_unlink("/flash/db1.dbf");//刪除文件db1.dbf

          可見, YAFFS的接口函數(shù)的使用方法與標(biāo)準(zhǔn)C語言中對文件的操作函數(shù)十分相似,簡單易用。

        5 總結(jié)

          YAFFS文件系統(tǒng)是第一個專門為NAND Flash存儲器編寫的嵌入式文件系統(tǒng)。它實現(xiàn)了掉電保護、疲勞均衡和有效的垃圾回收,與JFFS相比占用資源更少,運行速度更快;與FAT相比,更適合用于管理NAND Flash數(shù)據(jù)存儲器。在C51系統(tǒng)中如果需要實現(xiàn)Flash文件系統(tǒng),那么移植YAFFS是個不錯的選擇,但是畢竟它是一個在32位機的Linux下開發(fā)出來的,要讓它能與8位機的C51風(fēng)格完美結(jié)合,還需要進一步的努力。

        參考文獻

        [1] Samsung公司. K9F5608DataSheet. 20031217.
        [2] 毛勇強,黃光明. YAFFS文件系統(tǒng)在嵌入式Linux上的實現(xiàn). 電子設(shè)計應(yīng)用,2006(3).
        上一頁  [1] [2] 
      1. 上一篇: 硬件工程師必看---必殺技學(xué)習(xí)
      2. 下一篇: AVR單片機的RTOS-AVRX應(yīng)用
      3. 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
        熱點文章
         
        推薦文章
         
        相關(guān)文章
        網(wǎng)友評論:(只顯示最新5條。)
        關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

        點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
        本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
        機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
        Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
        電話:0571-87774297 傳真:0571-87774298
        杭州濱興科技有限公司提供技術(shù)支持

        主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
        中國行業(yè)電子商務(wù)100強網(wǎng)站

        網(wǎng)站經(jīng)營許可證:浙B2-20080178-1
        黑人巨茎大战欧美白妇_一区二区在线 | 国_天堂SV在线最新版在线_97在线观看视频
          <ol id="glfvi"></ol>

          <fieldset id="glfvi"></fieldset>

          1. <mark id="glfvi"></mark>
              <var id="glfvi"></var>

              <big id="glfvi"></big>