質問: ログ取得のプログラム はじめまして。 組み込みos(itron)で開発を行っています。 で、デバッグ用にログを取得してコマンドで確認しようと考えています。 そこで質問なんですが、 ・ログデータを書き込むメモリは動的確保と静的確保で違いはあるのでしょうか? ・ログ書き込み用のメモリがなくなったら上書き形式で古いのから消していきたいのですが、どのようなプログラムで実現できるのでしょうか? 各ログデータに次ポインタを持たせて、そこで次のログデータのアドレスを示すことでできるかなと思っていますが。
回答: >組み込みos(itron)で開発を行っています。 ということが前提であれば、ログ領域専用にメモリを「独立して」静的に割り当ててください。 動的ではただでさえ、逼迫する可能性のあるスタック/ヒープメモリを無駄に使用することになり、通称のシステムの動作そのものに障害が発生する可能性があります。 >・ログデータを書き込むメモリは動的確保と静的確保で違いはあるのでしょうか? 前述のとおり組み込みの場合は静的。 >・ログ書き込み用のメモリがなくなったら上書き形式で古いのから消していきたいのですが、どのようなプログラムで実現できるのでしょうか? fifoを利用したリングバッファを使用するのは他の方と同様。 但し、この「ログを出力する」という処理自体がシステムの負荷になるため、最低限の処理として影響を及ぼさないようにする。 また、「発生した内容をそのまま」記載すると使用するメモリが多くなるため、 「ログ書き込みモジュール番号」「エラー番号」「補足値1」「補足値2」 といった定型のサイズと内容を決め使用する。 >各ログデータに次ポインタを持たせて、そこで次のログデータのアドレスを示すことでできるかなと思っていますが。 は、メモリのロスと分断化が発生する可能性があり、その後に大きなメモリを確保する処理が動作できなくなるので無意味。 ところで、「組み込み」なら最初に使用する(可能性のある)メモリについてそれぞれのモジュールで算出して使用するh/w(のメモリ)で対応できるか検討するはずですが... これを行わないと、「どれだけ記録する(記録できるメモリを確保できるか)」ということも算出できませんから。