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

Tetsuo TAKAHASHI tetsu-t @ mbd.ocn.ne.jp
2016年 6月 6日 (月) 21:17:33 JST


高橋と申します。

経験則的に…ですが、

> 2016/06/06 10:10、SAKATA,KOSUKE / 坂田昂亮 <kosuke.sakata.oy @ hitachi-automotive.co.jp> のメール:
> お世話になります、日立オートモティブシステムズの坂田と申します。

> 症状はファイルシステムの利用中に発生しております。
> Mindstorms EV3に挿入するmicroSDカード内に予め作成したログ保存用フォルダに、
> .csv形式で任意のテキストデータを書き込むプログラムを作成いたしました。
> 書き込み処理(fprintf関数)は周期起動タスクで実行させており、周期は4msと設定しております。
> fopen,fcloseは下記のごとく周期起動タスク外でタスク起動前、タスク終了後に実行しております。

fopen,fcloseが最初と最後にあるのは良いとして、RTOSを使用するような組み込みシステムの
場合、周期毎にwriteを実施するのでなく、一定以上の量を溜めてからwriteすることの
方が良いかと思います。

通常、

> プログラム開始→fopen→周期タスク起動→(〜〜4ms周期で書き込み〜〜)→周期タスク終了→fclose→プログラム終了

上記の周期タスクの中で、writeするのではなく、バックグラウンド的なタスクを用いて、
周期に依存しない形で書き込み用のタスクを管理します。
書き込むデータそのものは、リングバッファ等のバッファに溜め込んで置いて、書き込み
用の周期に依存しないタスクが必要な時に書き出しを行っていくやり方をします。

> 症状はこの書き込み周期タスクの処理時間が一定の時間間隔で4msを大きく超えるタイミングが発生するというものです。

症状については、実際のモノを見ないと分かりませんが、タスクの構成でなんとかなりそうな
気がしますが...


--
// Tetsuo TAKAHASHI <tetsu-t @ mbd.ocn.ne.jp>