最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

FATFS ff14b版本最簡移植

2023-03-02 20:47 作者:搞嵌入式的老徐  | 我要投稿


1、前期工作

從FATFS網站上下載相關軟件包(http://elm-chan.org/fsw/ff/archives.html)

準備正點原子戰(zhàn)艦板SD卡實驗例程代碼


2、拷貝ff14b到Middlewares文件夾下,并修改文件夾名字為FATFS


3、把FATFS文件夾中的diskio.c和ff.c兩個文件加入到新建的Middlewares/FATFS分組下

編譯,等看編譯結構,修改錯誤

簡單來說,就是diskio.c文件中原來存放的函數(shù)在我們程序中不存在。簡單粗暴,就是刪除這部分代碼,后面我們根據(jù)自己寫的驅動代碼再進行添加。

編譯,等看編譯結構,修改錯誤

FATFS默認是使能RTC功能的,這里需要用到get_fattime函數(shù),但是該函數(shù)沒有定義,這里有兩個解決辦法:① 編寫一下這個函數(shù) ② 通過ffconf.h把這個功能關掉

這里演示一下第二個辦法:

編譯,等看編譯結構,修改錯誤

現(xiàn)在只有warning,因為我們把diskio.c里面的函數(shù)內部實現(xiàn)都刪除了,也沒有返回值,所以提示這個warning。

4、修改ffconf.h文件

從ffconf.h前面往后看配置項,有很多配置項,這里我們明確一下是最簡移植,所以簡單修改3個配置項即可,F(xiàn)F_USE_STRFUNC、FF_CODE_PAGE和FF_VOLUMES

#define FF_USE_STRFUNC 1

看注釋就很清楚,開啟這個宏就可以使用字符串輔助函數(shù),如f_gets(),f_putc(),f_printf()。這些函數(shù)在進行文件讀寫操作有用到。

(注:有比較多的配置項都是配置是否可以使用相關函數(shù))

#define FF_CODE_PAGE 936

由于作者是日本人,所以原先這個宏的值是932,而我們要設置成936即為簡體中文編碼,當不正確設置會導致打開文件失敗

#define FF_VOLUMES 1

這個宏是設置有多少個卷,簡單來說,就是說你需要掛載多少個設備,在這里,我們只掛載1個SD卡設備,所以設置為1

其他宏可以根據(jù)自己需求進行修改,提示一點,假如功能用不了,可以看看宏是否有開啟


5、修改diskio.c文件

這里的diskio.c中有5個函數(shù),disk_initialize、disk_status、disk_read、disk_write、disk_ioctl

首先先把物理磁盤號的宏設置好

編寫disk_status函數(shù)

該函數(shù)的功能是獲取驅動器狀態(tài)的,當然大家可以根據(jù)返回狀態(tài)進行編寫,這里可以直接返回“RES_OK”

編寫disk_initialize函數(shù)

該函數(shù)的功能用于對硬件進行初始化,注意需要包含相對應的頭文件

編寫disk_read函數(shù)

該函數(shù)的功能是用于SD卡中讀取數(shù)據(jù)

編寫disk_write函數(shù)

該函數(shù)的功能用于向SD卡寫入數(shù)據(jù)。

(注:這里涉及到FF_FS_READONLY宏,默認只讀功能關閉,寫操作相關函數(shù)才能使用)

編寫disk_ioctl函數(shù)

該函數(shù)的功能用于控制設備實現(xiàn)指定功能,用于輔助FATFS中的其他API


6、編寫測試代碼

函數(shù)內部比較簡單,用到f_mount函數(shù)、f_open函數(shù)、f_write函數(shù)和f_read函數(shù),以及f_tell和f_lseek函數(shù)。

簡單說一下函數(shù)做了什么事情:

① 通過f_mount掛載SD卡設備

② 通過f_open打開文件(這里注意函數(shù)的第三個參數(shù),創(chuàng)建一個文件,可讀可寫),這里的文件是空的

③ 打開文件成功后,通過f_size看看文件大小,通過f_read讀取一下數(shù)據(jù),假如有數(shù)據(jù)讀取到,那就打印出來原始數(shù)據(jù)。由于這里屬于新建文件,所以讀取不到信息的。

④ 通過f_write寫入數(shù)據(jù)“33689745”

⑤ 繼續(xù)調用f_write在后面繼續(xù)寫入"2222"

⑥ 由于使用f_write會把讀寫指針往后偏移,所以讀取數(shù)據(jù)前,使用f_lseek進行偏移到頭部,然后再通過f_read讀取數(shù)據(jù)并打印

⑦ 操作完成,通過f_close關閉文件

通過串口助手可以看到,打印信息

打開SD卡,查看到有TEST.TXT文件,內容如下:

注意一下:定義FATFS和FIL變量,我們采用的是定義一個指向FATFS和FIL的指針變量,然后通過內存管理進行申請內存。這樣會減少內存的開銷。

假如我們定義局部變量的話,這樣子占用的內存空間太大了。

還有一種方式就是定義成全局變量進行使用。


上面測試代碼中用到的文件系統(tǒng)開放API函數(shù)介紹

通過f_mount函數(shù)對磁盤進行掛載,在這里就是SD卡了。

注:常見錯誤返回值:FR_NOT_ENABLED和FR_NO_FILESYSTEM。

假如是FR_NOT_ENABLED,這時候你得檢查一下是否已經申請到內存

假如是FR_NO_FILESYSTEM,這時候你得檢查一下SD卡的文件系統(tǒng)是否被破壞了,或者不是FAT32。

通過f_open函數(shù)對文件進行打開。

注:函數(shù)的形參mode比較重要,可以理解為對形參path文件的操作權限

FA_READ就是讀權限、

FA_WRITE就是寫權限,

FA_OPEN_EXISTING就是打開已有的文件,沒有該文件會失敗

FA_CREATE_NEW就是創(chuàng)建一個新文件,已存在文件會出現(xiàn)提示FR_EXIST錯誤

FA_CREATE_ALWAYS就是創(chuàng)建一個文件,假如已存在的話,會對其進行覆蓋

FA_OPEN_ALWAYS就是打開一個文件,假如不存在的話,就會創(chuàng)建

FA_OPEN_APPEND功能和FA_OPEN_ALWAYS一樣,只不過讀寫指針會在文件末尾

通過f_read函數(shù)進行文件數(shù)據(jù)讀取

注:btr是你要求要讀多少數(shù)據(jù),而br是已經讀到多少數(shù)據(jù),可以對br進行判斷看是不是讀完了。

通過f_write函數(shù)進行文件數(shù)據(jù)寫入

這里的參數(shù)跟f_write差不多。這個函數(shù)需要注意的是寫完數(shù)據(jù)后,它的讀寫指針會在尾部,所以你想對寫入內容進行讀取,就需要重新把讀寫指針偏移到開頭,用到f_lseek函數(shù)。

注:操作完之后,需要f_close,非常作用,不然后果就是啥都沒有干


FATFS ff14b版本最簡移植的評論 (共 條)

分享到微博請遵守國家法律
花莲县| 云霄县| 定襄县| 东莞市| 错那县| 谢通门县| 永德县| 呈贡县| 东方市| 东平县| 葫芦岛市| 衢州市| 台湾省| 桂平市| 凤台县| 阿图什市| 龙州县| 西乌珠穆沁旗| 长子县| 武定县| 铜陵市| 汤阴县| 星座| 西林县| 博客| 中西区| 临泉县| 自贡市| 岳普湖县| 青岛市| 牟定县| 梓潼县| 阿克陶县| 淳化县| 宁晋县| 昆山市| 景德镇市| 东兴市| 镇雄县| 哈密市| 买车|