PR

【FatFS】f_utime関数の使い方【マイコン実装】

なんやこれ、よくわからん。。。

psoc6にfatfs入れて、f_utimeで軽くつまずいたのでまとめます。

姫野秀徳

組み込みエンジニアとしてメーカー勤務10年。
第二種電工事士、基本情報技術者、Code.org認定教師。
microbitを用いた電子工作&プログラミング教室を開校。
組み込み開発の実際を発信するyoutube活動も行う。

無料で学べる組み込み開発オンラインスクールはじめました!
https://kumicla.tatepro.com

姫野秀徳をフォローする

f_utimeとは

f_utimeはファイルのタイムスタンプを設定する関数です。

chanさんのページはこちら

FatFs - f_utime

このサイトのコード例にあるように第1引数objにファイルパスを指定して、第2引数fno構造体に入っている日時情報に更新する、という動作です。

FRESULT set_timestamp (
    char *obj,     /* Pointer to the file name */
    int year,
    int month,
    int mday,
    int hour,
    int min,
    int sec
)
{
    FILINFO fno;

    fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);
    fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);

    return f_utime(obj, &fno);
}

簡単そうですが、ファイルパスの指定方法や事前に変数設定が必要だったりして、初見だとちょっと苦労するんですよね。

なので、順に説明していきます。

ffconf.hの設定

まずやらないといけないのが、ffconf.hの設定です。

FF_FS_READONLYを0、FF_USE_CHMODを1にします。

chanさんのライブラリをそのまま持ってきた状態だと、たぶんFF_USE_CHMODが0になってます。

いずれも設定できたら、ffconf.hはOKなので次いきます。

ファイルパスの指定方法(第一引数)

まずはchanさんのこちらのページをご覧ください。

FatFs - Path Names

ffconf.hにあるFF_FS_RPATHの設定によって、相対パスか絶対パスか設定でき、初期設定はFF_FS_RPATH=0で、絶対パスです。
※たぶんRPATHはRelated Path(=相対パス)の略。

で、FatFSには論理ドライブの概念があって、標準だとドライブ0(ゼロ)が割り振られてるんですね。
(f_chdrive関数でドライブ番号は変更できますが、これはいったん置いときます)

ドライブ0にファイルが展開されていて、ドライブ0に今いる、ということは意識しておきましょう。

なので、例えば、1.txtというテキストファイルのタイムスタンプを設定したい場合、絶対パス指定されているなら、

f_utime("1.txt", &fno);

となります。

0:/1.txtとか、/1.txtとかしなくてよいです。単純にファイル名だけを与えます

対象ファイルが開いているときはタイムスタンプ設定できない?

私のつまずいた点として、f_utime関数を使うタイミングがあります。

f_openでファイルを開いて、f_writeで書き込みをし、f_utimeでタイムスタンプ設定し、f_closeでファイルを閉じる

。。。

これはダメでした。f_closeしたあとにf_utime関数を呼ぶ必要があります

ファイルを開いているときのf_utime関数の戻り値はFR_OKだったので問題ないと思いましたが、実際にはダメでした。

これは意外な盲点になるかもしれませんので、ご注意を。

まとめ

ffconf.hのFF_USE_CHMODを1にします。

ファイルパスは絶対パス(初期設定)の場合、ファイル名だけを与えます。

対象ファイルは閉じておかないとタイムスタンプが設定されない?

マイコンだと時刻情報としてRTCが必要になります。もし外付けするなら、DS3231が便利ですよ!

この内容が良いと思ったら、いいね💖を押して教えてください!

組みクラ – 組み込み開発を学び、未来を創るエンジニアへ
無料で学べる!組み込み開発の基礎から応用までをマスターできるオンラインスクール「組みクラ」

組み込みエンジニアは、あらゆる産業の基盤を支える重要な職業です。
私たちタテプロは、次世代の組み込みエンジニアを育成し、業界の競争力を高めるために活動しています。
あなたも、無料で学べる「組みクラ」で、組み込み開発のスキルをしっかり身につけ、キャリアを加速させましょう!
今すぐ学び始めて、将来の自分をステップアップさせる第一歩を踏み出しませんか?

\立プロとLINEで友だちになりませんか/
立プロと友だちになる
組み込み機器
シェアしていただけると嬉しいです!

コメント

タイトルとURLをコピーしました