(2019.6.13作成)
ChaN氏の作成されているファイルシステム-FatFsは電子工作でSDカードを使うためにはとても便利なツールですが、STM32F103C8T6基板にこちらで公開している関数群を使用して実装すると大きなFlash領域を占有してしまいました。
そこでこのページでは各機能を実装した場合にどの程度のFlash領域を使用したか実例を示してみようと思います。またさらにChaN氏が同時に公開されている小型マイコン向けのファイルシステム ぷちFatFsを使用した場合のFlash使用量についても紹介してみようと思います。
なおこの記事の最後に今回使用したライブラリとサンプルファイルをダウンロードできるリンクを置いていますので、合わせてご確認ください。
ぷちFatFsは上述のように小型マイコン向けに作成されているため使用に当たっては以下のような厳しい?制約があります。
などです。このためテストする前には事前にPCなどでファイルを作成し、SDカードに保存しておく必要があります。
ご参考までにPythonで任意のサイズの空ファイルを作成するスクリプトを以下に示します。下の例では1024バイトの空ファイルを作成します。
import numpy as np zero = np.zeros((1024), dtype=np.byte) with open("Petit.bin", "wb") as f: f.write(zero)
STM32F103C8T6基板を使用して、いろいろと条件を変えてビルドを行いました。その結果を下に示します。なおベースとして用いたコードはこちらのサンプルコードです。
RTC | 文字操作 | Debugビルド | Releaseビルド | |||
FatFs | 〇 | 〇 | 47.2kB | 72% | 36.0kB | 55% |
〇 | × | 46.7kB | 71% | 36.5kB | 56% | |
× | 〇 | 35.6kB | 54% | 25.9kB | 40% | |
× | × | 34.7kB | 53% | 26.7kB | 41% | |
Petit FatFs | × | × | 26.7kB | 41% | 16.8kB | 26% |
簡単に実験条件を示すと、RTCを有効にする際はRTCペリフェラルを用いるとともにFF_FS_NORTC=1として設定しています。また文字操作とはFF_USE_STRFUNCスイッチを0, 1にそれぞれ設定しています。
上記の通りPetit FatFs を用いるとFlashの使用量はずいぶん小さくなります。しかしFatFsを用いたとしてもRTCの使用をやめるだけで随分とFlashの使用量が削減されることがわかります。
このことからFlashなどに本当に余裕がないときはPetit FatFsを使用するのがよいと思いますが、まずはRTCを使用しないなど必ずしも必要でない機能を削減することでFlashの容量を削減するのがよいのではないかと思いました。
ちなみにRTCを使用したらFlash容量が激増する理由ですが、時間計算にCのtime.hをインクルードしているからかもしれませんが未検証です。
上記テストを行ったサンプルプログラムとSDカード操作クラスはこちらからダウンロードしていただけます。またRTCやGPIOなど基本的なペリフェラルを操作するクラスはこちらからダウンロードしていただけます。