新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何在C51系統上實現YAFFS文件系統

        如何在C51系統上實現YAFFS文件系統

        作者: 時間:2011-05-18 來源:網絡 收藏

        3.2 向風格轉化

          是在Linux環境下利用開發用戶程序的C語言開發的。它與是有些差別的,主要有:

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

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

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

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

        4 C51下的YAFFS使用實例

          下面的程序代碼是設計中的對DBF數據庫操作的關鍵代碼。

        yaffs_StartUp();//設置一些參數,包括各分區在Flash中的起始塊和結束塊的地址、預留塊數等
        yaffs_mount(/flash); //YAFFS支持多個分區,這里選擇掛載/flash分區新建db1.dbf
        f=yaffs_open(/flash/db1.dbf, O_CREAT,S_IREAD | S_IWRITE);
        yaffs_close(f);//關閉文件db1.dbf
        f=yaffs_open(/flash/db1.dbf, O_RDWR,0);//以讀/寫的方式打開文件db1.dbf
        r=yaffs_write(f,hello,5);//向文件寫數據
        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);//從文件讀取數據
        r=yaffs_close(f);//關閉文件db1.dbf
        r=yaffs_unlink(/flash/db1.dbf);//刪除文件db1.dbf

          可見, YAFFS的接口函數的使用方法與標準C語言中對文件的操作函數十分相似,簡單易用。

        5 總結

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宁乡县| 桂平市| 县级市| 仙桃市| 修水县| 磐石市| 马关县| 化隆| 天门市| 和田县| 井陉县| 中西区| 吕梁市| 和林格尔县| 浪卡子县| 得荣县| 潮安县| 宿迁市| 邵阳市| 江源县| 保定市| 芒康县| 青岛市| 永清县| 罗定市| 鄂托克前旗| 库尔勒市| 上高县| 永靖县| 虎林市| 特克斯县| 平和县| 小金县| 吐鲁番市| 闵行区| 桑植县| 壤塘县| 安乡县| 重庆市| 随州市| 东明县|