说说FATFS文件系统(转)
說說FATFS文件系統(轉)
FATFS是一個為小型嵌入式系統設計的通用FAT(File?Allocation?Table)文件系統模塊。FatFs?的編寫遵循ANSI?C,并且完全與磁盤I/O層分開。因此,它獨立(不依賴)于硬件架構。它可以被嵌入到低成本的微控制器中,如AVR,?8051,?PIC,?ARM,?Z80,?68K?等等,而不需要做任何修改。?
?
FatFS文件系統包含了文件
?
ff.h ????????:文件系統實現頭文件,定義有文件系統所需的數據結構
diskio.h ?:底層驅動頭文件,就一些狀態宏的定義和底層驅動函數的申明
integer.h:僅實現數據類型重定義,增加系統的可移植性
ffconf.h :文件系統配置
ff.c ?:文件系統實現。
diskio.c 底層驅動
?
FatFs 提供下面的函數API:
f_mount - 注冊/注銷一個工作區域(Work Area)
f_open - 打開/創建一個文件f_close - 關閉一個文件
f_read - 讀文件f_write - 寫文件
f_lseek - 移動文件讀/寫指針
f_truncate - 截斷文件
f_sync - 沖洗緩沖數據 Flush Cached Data
f_opendir - 打開一個目錄
f_readdir - 讀取目錄條目
f_getfree - 獲取空閑簇 Get Free Clusters
f_stat - 獲取文件狀態
f_mkdir - 創建一個目錄
f_unlink - 刪除一個文件或目錄
f_chmod - 改變屬性(Attribute)
f_utime - 改變時間戳(Timestamp)
f_rename -?重命名/移動一個文件或文件夾
f_mkfs - 在驅動器上創建一個文件系統
f_forward - 直接轉移文件數據到一個數據流 Forward file data to the stream directly
f_gets - 讀一個字符串
f_putc - 寫一個字符
f_puts - 寫一個字符串
f_printf - 寫一個格式化的字符磁盤I/O接口
f_tell - 獲取當前讀/寫指針
f_eof - 測試一個文件是否到達文件末尾
f_size - 獲取一個文件大小
f_error - 測試一個文件是否出錯
?
因為FatFs模塊完全與磁盤I/O層分開,因此需要下面的函數來實現底層物理磁盤的讀寫與獲取當前時間。底層磁盤I/O模塊并不是FatFs的一部分,并且必須由用戶提供。
disk_initialize - Initialize disk drive 初始化磁盤驅動器
disk_status - Get disk status 獲取磁盤狀態
disk_read - Read sector(s) 讀扇區
disk_write - Write sector(s) 寫扇區
disk_ioctl - Control device dependent features 設備相關的控制特性
get_fattime - Get current time 獲取當前時間
FatFS系統特性
打開文件數量:無限制,與可用內存有關。 卷(volume)數量:最多10個。?
文件大小:與FAT規范有關(最大4G-1字節)。?
卷大小:與FAT規范有關(在512字節/扇區上,最大2T字節)?
簇(Cluster)大小:與FAT規范有關(在512字節/扇區上,最大64K字節) 扇區(Sector)大小:與FAT規范有關(最大4K字節)
創建文件并讀寫的使用例程
1)f_mount(0, &fatFS); ??????????????????????????????????????
2)f_mkfs(0,1,512); ????????????????//創建文件系統
FRESULT f_mkfs (?BYTE ?Drive, ???????????
?BYTE ?PartitioningRule,?
?WORD ?AllocSize ????????);
?
分區規則:當給定0時,首先在驅動器上的第一個扇區創建一個分區表,然后文件系統被創建在分區上。這被稱為FDISK格式化,用于硬盤和存儲卡。當給定1時,文件系統從第一個扇區開始創建,而沒有分區表。這被稱為超級軟盤(SFD)格式化,用于軟盤和可移動磁盤。
3)f_getfree("0:", &fre_clust, &fs2) ??//獲得磁盤存儲空間大小?
4)f_open(&file1, "/srcfile.txt", ?FA_OPEN_ALWAYS | FA_READ | FA_WRITE); ?//打開文件
FIL ????file1; ??
5)f_puts(cDataBuf, &file1); ???//將cDataBuf[]數據寫入 文件srcfile.txt
6)f_sync (&file1); ??//刷新文件
7)f_lseek(&file1, 0); ??//從文件 偏移字節0出開始讀文件
8)f_read(&file1, buffer, 10,&r); ????//讀出10個字節到 buffer[]中
9)f_close(&file1); ??//操作完成 ?關閉文件
?
創建目錄例程
1) f_chdir("0:"); ??//切換到根目錄
2)f_mkdir("folder"); ??//創建目錄 folder
3)f_open(&file1, "folder/oldname2.txt", FA_CREATE_ALWAYS | FA_WRITE); ?//打開folder目錄下的文件
4)f_close(&file1); ???//關閉文件
分類: 嵌入式系統知識點 好文要頂 關注我 收藏該文 張凌001關注 - 0
粉絲 - 17 +加關注 0 0 ? 上一篇:以操作系統的角度述說線程與進程(轉)以及區別及聯系
? 下一篇:C語言100個經典的算法之兔子總數計算內含printf的用法
<p class="postfoot">posted on <span id="post-date">2018-02-22 15:52</span> <a href="https://www.cnblogs.com/zhugeanran/">張凌001</a> 閱讀(<span id="post_view_count">776</span>) 評論(<span id="post_comment_count">0</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=8459150" rel="nofollow">編輯</a> <a href="#" onclick="AddToWz(8459150);return false;">收藏</a></p> </div> <script type="text/javascript">var allowComments=true,cb_blogId=406829,cb_entryId=8459150,cb_blogApp=currentBlogApp,cb_blogUserGuid='7d0073df-8601-4e21-2355-08d54dbac325',cb_entryCreatedDate='2018/2/22 15:52:00';loadViewCount(cb_entryId);var cb_postType=1;</script></div><a name="!comments"></a><div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script> 刷新評論刷新頁面返回頂部 注冊用戶登錄后才能發表評論,請 登錄 或 注冊,訪問網站首頁。 【推薦】超50萬VC++源碼: 大型組態工控、電力仿真CAD與GIS源碼庫!
【推薦】華為云11.11普惠季 血拼風暴 一促即發
【工具】SpreadJS純前端表格控件,可嵌入應用開發的在線Excel
【騰訊云】拼團福利,AMD云服務器8元/月
相關博文:
· FATFS 文件系統
· fatfs文件系統f_lseek追加文件
· 文件系統、根文件系統 轉
· SD卡的讀寫和FatFS文件系統
· FatFS文件系統詳解-附移植建議
<a id="Footer1_Hyperlink3" name="Hyperlink1" href="https://www.cnblogs.com/" style="font-family:Verdana;font-size:12px;">博客園</a> <br> Copyright ? 張凌001
總結
以上是生活随笔為你收集整理的说说FATFS文件系统(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最全Vim快捷键键位图(入门到进阶)
- 下一篇: zephyr 系统--- 内存池使用方法