
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>組み込みOS(iTron)で開発を行っています。
ということが前提であれば、ログ領域専用にメモリを「独立して」静的に割り当ててください。
動的ではただでさえ、逼迫する可能性のあるスタック/ヒープメモリを無駄に使用することになり、通称のシステムの動作そのものに障害が発生する可能性があります。
>・ログデータを書き込むメモリは動的確保と静的確保で違いはあるのでしょうか?
前述のとおり組み込みの場合は静的。
>・ログ書き込み用のメモリがなくなったら上書き形式で古いのから消していきたいのですが、どのようなプログラムで実現できるのでしょうか?
FIFOを利用したリングバッファを使用するのは他の方と同様。
但し、この「ログを出力する」という処理自体がシステムの負荷になるため、最低限の処理として影響を及ぼさないようにする。
また、「発生した内容をそのまま」記載すると使用するメモリが多くなるため、
「ログ書き込みモジュール番号」「エラー番号」「補足値1」「補足値2」
といった定型のサイズと内容を決め使用する。
>各ログデータに次ポインタを持たせて、そこで次のログデータのアドレスを示すことでできるかなと思っていますが。
は、メモリのロスと分断化が発生する可能性があり、その後に大きなメモリを確保する処理が動作できなくなるので無意味。
ところで、「組み込み」なら最初に使用する(可能性のある)メモリについてそれぞれのモジュールで算出して使用するH/W(のメモリ)で対応できるか検討するはずですが…
これを行わないと、「どれだけ記録する(記録できるメモリを確保できるか)」ということも算出できませんから。
No.3
- 回答日時:
VC++ならArrayListを、Borland C++ならStringListを使うのが楽なのですが、iTronのC++には類似のライブラリクラスは無いのでしょうか?
Borland C++でStringListを使用した場合は、以下のように「とても楽」にコーディングできます。
・ログ用リスト変数の宣言
TStringList *LogList;
・プログラム起動時の初期化とログの読み込み
LogList = new TStringList(); //動的に確保
LogList->LoadFromFile("LogFile.Log"); //ログの読み込み
・ログの追加
if (LogList->Count >= 2000) { //2000行以上なら
LogList->Delete(0); //最も古い1行を削除して2000行以上にしない
}
LogList->Add("記録したいログの内容"); //末尾に1行追加(改行は不要)
LogList->SaveToFile("LogFile.Log"); //強制終了してしまった場合に備え、ログに1行追加するたびに、ログをファイルに書き込む
・プログラム終了時のログの書き込みとメモリの解放
LogList->SaveToFile("LogFile.Log"); //ログの書き込み
delete LogFile; //メモリ解放
他のC++でも、可変リストを扱えるクラスがあるなら、そのクラスから派生させた新規のクラスにロード、セーブの機能を付ければ、同様のクラスが作れます。
No.2
- 回答日時:
こんにちは。
> ・ログデータを書き込むメモリは動的確保と静的確保で違いはあるのでしょうか?
差はないと思います。無いと思いますが、ログを残す領域はシステムが稼働している間はずっと使い続けるので、動的に確保する意味がありません。なので、私は静的に(外部変数として)確保してしまうのが良いと思っています。
> ・ログ書き込み用のメモリがなくなったら上書き形式で古いのから消していきたいのですが、
> どのようなプログラムで実現できるのでしょうか?
リングバッファにして、古いデータをどんどん上書きしていけばご要望のものが実現できます。リングバッファ(FIFO)の例はここを参照してください。
http://www.nurs.or.jp/~sug/soft/super/fifo.htm
No.1
- 回答日時:
>・ログデータを書き込むメモリは動的確保と静的確保で違いはあるのでしょうか?
違いが特にないと思いますが、プログラム中に動的確保があるとログのメモリが分断されて管理が面倒です。
>・ログ書き込み用のメモリがなくなったら上書き形式で古いのから消していきたいのですが、どのようなプログラムで実現できるのでしょうか?
上書きで消せるのであれば、ログは同じサイズですよね?
だったら構造体配列で始めから必要サイズを確保するのが良いと思います。連続しているのでデバッガのダンプで見るときも楽ですから。
リングバッファとして扱えば上書き管理も単純です。
>各ログデータに次ポインタを持たせて、そこで次のログデータのアドレスを示すことでできるかなと思っていますが。
リスト構造はデバッガで追うのが面倒ですのでお勧めしません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- USBメモリー・SDカード・フラッシュメモリー microSDカードに追記出来ない 9 2023/06/18 17:19
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(パソコン・周辺機器) NVIDIAのシェーダーキャッシュ 1 2022/05/30 22:36
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
メモリのセグメント違反の解決...
-
ウインドウズのシステムにおけ...
-
Connection、ResultSet、、Stat...
-
メモリが不足しています(VBA)
-
C言語における再帰呼び出しの...
-
デバッグツール,Efenceでのmma...
-
「ヒープサイズの設定」て何?
-
組み込み系でのmallocについて
-
VBAの配列サイズとメモリに関して
-
[ちょっと息抜き]メモリを解放 ...
-
メモリ不足
-
4GB搭載したマシンのメモリ情...
-
Apacheでバーチャルホストの最...
-
C,C++プログラムの強制終了時の...
-
オブジェクトの開放
-
取ってこれないメモリのはずのm...
-
C#で別クラスインスタンスのメ...
-
Macターミナルで実行中のプログ...
-
C言語で途中までしか、プログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリが不足しています(VBA)
-
メモリのセグメント違反の解決...
-
「memcpy」と「strcpy」について
-
メモリ不足
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
C言語における再帰呼び出しの...
-
ファイルマッピング関数で失敗
-
ExitProcessの関数コールについ...
-
EXCEL-VBAにてADOのレコードセ...
-
エクセルVBA 大容量CSVファイル...
-
ExcelのVBAでメモリ解放できない
-
メモリを解放しないとどうなる?
-
バッチファイルでの実行EXEのメ...
-
Bitmapを重ね合わせる方法
-
ルネサスマイコン(R8C) ビルド...
-
C,C++プログラムの強制終了時の...
-
C言語:関数のメモリ上でのサイ...
おすすめ情報