FatFs移植筆記(R0.09)

來源:互聯網
上載者:User

FatFs移植筆記(R0.09)

  1. 首先將檔案拷貝到工程中,其中包括diskio.h、ff.h、integer.h、ff.c、ffconf.h。
  2. 建立檔案diskio.c。
  3. 將這些檔案添加到工程中。
  4. 根據系統類別型設定ffconf.h。
    • _FFCONF是代表了版本號碼,不做處理。
    • 函數和緩衝區配置
      • _FS_TINY設定緩衝區的位置,假如設定為0,也就是每個檔案(FIL結構體)中帶一個buf,否則的話,整個檔案系統公用一個buf。目前沒有鬱悶到一點記憶體也沒有的地步,所以還是選擇為0。
      • _FS_READONLY設定是否檔案唯讀,我們的系統是可讀寫的,所以設定為0。
      • _FS_MINIMIZE設定為0,因為以下的那些函數我們都用的著,不能簡化。
      • _USE_STRFUNC設定是否使用字串函數,主要有f_gets, f_putc, f_puts, f_printf四個函數,我們暫時不想用,因為我們的資料都是自訂結構體的儲方式,為了節省空間的這個設定為0。
      • _USE_MKFS設定是否實現f_mkfs函數。我們需要在裝置初始化時完全格式化Flash,所以此函數需要。
      • _USE_FORWORD設定
      • _USE_FASTSEEK設定是否支援檔案快速定位,它主要採用緩衝區來儲存簇鏈映射圖,以空間換時間,對於我們系統不合算,還是採用普通定位方式好。
    • 本地化和命名空間配置
      • _CODE_PAGE設定目標系統的本地化設定,本系統有ASCII支援就足夠了,支援本地化的情況下,模組的大小將大幅增加,反而不符合我們選擇FatFs的初衷,所以選擇1。
      • _USE_LFN設定長檔名,我們系統不支援,也是因為不能帶來多大好處。
      • _MAX_LFN不用設定,因為不支援長檔名。
      • _LFN_UNICODE設定長檔名是否支援Unicode,我們選擇不支援,因為我們就不支援長檔名。
      • _FS_RPATH設定相對路徑支援。相對路徑在編程的時候特別方便,但是為了先移植成功,暫不支援。
    • 物理磁碟機配置
      • _VOLUMES設定邏輯磁碟機的個數,本目標系統是一塊4M的Flash,所以預設為1。
      • _MULTI_PARTITION設定是否多個分區。本目標就一塊4M的Flash,不值當的分幾個區。
      • _USE_ERASE設定擦除扇區。我查看代碼,只是在f_mkfs和remove_chain兩個函數中添加擦除的代碼,而且完全是額外代碼,只要不影響使用的情況下,為了速度的原因,這些資料是沒必要擦除的。
    • 系統配置
      • _WORD_ACCESS設定是否支援字訪問。不支援。
      • _FS_REENTRANT設定是否重入。因為我們的系統檔案訪問不是很頻繁,而且都是在一個任務中訪問,所以不支援重入。
      • _FS_TIMEOUT逾時設定。
      • _SYNC_t訪問重入時的同步控制代碼。
      • _FS_SHARE設定檔案分享權限設定,能同時被幾個檔案同時開啟。設定為0。
  5. 設定完成後,編譯器,會發現disk_write, disk_read, disk_ioctl, disk_status, disk_initialize, get_fattime.
    • 根據系統配置來實現這些函數。順序是先易後難。
    • get_fattime顧名思義是得到系統的時間。這個從RTC擷取時間就OK。
    • disk_initialize和disk_status這兩個函數實現的內容是一樣的。因為都是為了擷取磁碟機的狀態是否可以進行下一步操作,我們這裡沒那麼多限制,只是限制磁碟機代號不要超界就好。
    • 然後是disk_ioctl,這個函數實現了控制I/O的特性設定。這個函數主要有5個控制標誌:CTRL_SYNC, GET_SECTOR_COUNT, GET_SECTOR_SIZE, GET_BLOCK_SIZE, CTRL_ERASE_SECTOR.
    • disk_read磁碟寫。
    • disk_write磁碟讀。
    • disk_ioctl, disk_read, disk_write三個函數配合來實現目標系統的讀寫。如果目標系統有實現好的儲存代碼,只需要實現這三個函數和儲存代碼的介面就好,加入沒有就需要寫驅動程式和這三個函數配合,最好的方法是驅動和介面不要耦合,為了最佳化讀寫還可以添加磁碟緩衝的代碼。
  6. 添加測試代碼測試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.