(toppers-users 4543) Re: 周期タスク内でのファイルシステム利用時の処理時間について

Taketoshi Iyota iyota @ soka.ac.jp
2016年 6月 6日 (月) 13:56:45 JST


日立オートモティブシステムズ 坂田 様

はじめまして、創価大学理工学部の伊与田と申します。
ご存知のことと思いますが、SDカードで記憶媒体として使われているのはフラッシュ
メモリーです。フラッシュメモリーは、(消去されていない領域では)書き込み前に
消去の動作が必要になります。この動作はSDカード内部のコントローラで行われてい
ますが、その動作はカードの容量やメーカーごとにいろいろと異なるようです。

組込み用のFATファイルシステムのソフトウェアとして有名な「FatFS」の作者の
ChaNさんのページで、
MMC/SDCの使いかた    http://elm-chan.org/docs/mmc/mmc.html
というのがあります。その内容の最後の方で、SDカードの書き込み動作について調べ
て書かれているところがありますので、参照してみて下さい。

また、実際に使用されているSDカードについて、いろいろな書き込みのパターンを
実行して、書き込みにかかる時間がどのように変化するか、調べられてはいかがで
しょうか。

-------------------------------------------------------------------------------
On Mon, 6 Jun 2016 01:10:45 +0000
SAKATA,KOSUKE / 坂田昂亮 <kosuke.sakata.oy @ hitachi-automotive.co.jp> wrote:
> 症状はファイルシステムの利用中に発生しております。
> Mindstorms EV3に挿入するmicroSDカード内に予め作成したログ保存用フォルダに、
> .csv形式で任意のテキストデータを書き込むプログラムを作成いたしました。
> 書き込み処理(fprintf関数)は周期起動タスクで実行させており、周期は4msと設定しております。
> fopen,fcloseは下記のごとく周期起動タスク外でタスク起動前、タスク終了後に実行しております。
> プログラム開始→fopen→周期タスク起動→(〜〜4ms周期で書き込み〜〜)→周期タスク終了→fclose→プログラム終了
> 症状はこの書き込み周期タスクの処理時間が一定の時間間隔で4msを大きく超えるタイミングが発生するというものです。
> 書き込み周期タスクの処理時間は、平時は1ms以下で処理されるようですが、およそ180msに1回の時間間隔で10ms〜20msほどかかるタイミングが発生しており、4ms周期を守れていません。
> ちなみに、1周期の処理で書き込むデータ量は4byteの変数値1つ(+改行コード)です。
> また、既定周期を4ms→10msと変更した場合でも、上記の症状が発生することを確認しており、
> その場合、周期オーバーが発生する時間間隔が、およそ180ms→およそ450msに変化します。
> 処理時間のモニタにはget_utm関数で取得したμ秒タイマ情報を使用しています。
> 以上がこちらで確認している現象となります。