スナップショット
スナップショット機能は、実行中のCPUの状態やメモリの状態をファイル等に保存し、それを 別環境で再現し、デバッグを行うための機能です。
API
スナップショット機能のAPIを使用するには、solid_snapshot.h
をインクルードしてください。
#include "solid_snapshot.h"
スナップショット保存属性
-
SOLID_SNAPSHOT_ATTR_DEBUG
-
SOLID_SNAPSHOT_ATTR_REGISTER
-
SOLID_SNAPSHOT_ATTR_CODE
-
SOLID_SNAPSHOT_ATTR_RODATA
-
SOLID_SNAPSHOT_ATTR_DATA
-
SOLID_SNAPSHOT_ATTR_MMU
-
SOLID_SNAPSHOT_ATTR_STACK
-
SOLID_SNAPSHOT_ATTR_HEAP
-
SOLID_SNAPSHOT_ATTR_OSSTACK
-
SOLID_SNAPSHOT_ATTR_LDR_CODE
-
SOLID_SNAPSHOT_ATTR_LDR_RODATA
-
SOLID_SNAPSHOT_ATTR_LDR_DATA
-
SOLID_SNAPSHOT_ATTR_USER_AREA
定数
名前
説明
SOLID_SNAPSHOT_ATTR_DEBUG
スナップショットデバッグ用設定
SOLID_SNAPSHOT_ATTR_REGISTER
CPUのレジスタ情報をスナップショットに含める
SOLID_SNAPSHOT_ATTR_CODE
コード領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_RODATA
ReadOnlyデータ領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_DATA
データ領域(bss含む)をスナップショットに含める
SOLID_SNAPSHOT_ATTR_MMU
MMU設定をスナップショットに含める
SOLID_SNAPSHOT_ATTR_STACK
SOLIDのスタックをスナップショットに含める
SOLID_SNAPSHOT_ATTR_HEAP
SOLID_HEAP領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_OSSTACK
OSSTACK領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_LDR_CODE
ローダブルモジュールのコード領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_LDR_RODATA
ローダブルモジュールのReadOnlyデータ領域をスナップショットに含める
SOLID_SNAPSHOT_ATTR_LDR_DATA
ローダブルモジュールのデータ領域(bss含む)をスナップショットに含める
SOLID_SNAPSHOT_ATTR_USER_AREA
ユーザー指定エリアをスナップショットに含める
SOLID_SNAPSHOT_Create
-
int SOLID_SNAPSHOT_Create(uint32_t attr, SOLID_CPU_CONTEXT *pContext)
スナップショットの作成
スナップショットの作成を通知します。pContextがNULLでない場合、CPUのレジスタ情報は pContextのものが使用されます。これにより、例外発生場所のコンテキストでのスナップショットが生成されます。 NULL を指定した場合には、
SOLID_SNAPSHOT_Create
を呼び出したコンテキストのスナップショットが生成されます。SMPの場合、他CPUのコンテキストはSGIを発行し、割り込みが実行された位置を保存します。
- パラメータ
attr -- スナップショット保存属性
pContext -- 保存するコンテキスト。
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_SNAPSHOT_AddUserArea
-
int SOLID_SNAPSHOT_AddUserArea(SOLID_ADDRESS addr, size_t size)
スナップショットのユーザーエリアの登録
スナップショット機能にて保存される、ユーザーが指定可能な領域を登録します。 最大10領域まで指定可能です。
- パラメータ
addr -- ユーザー領域の先頭アドレス
size -- ユーザー領域のサイズ(byte)
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー
要実装関数
スナップショット機能の要実装関数の定義は、impl_snapshot.h
にあります。
#include "impl_snapshot.h"
スナップショット機能は、割り込み禁止状態で処理を行います。このため、要実装関数の中では 割り込みを使用した操作は行えないことに注意してください。
IMPL_SNAPSHOT_Open
-
int IMPL_SNAPSHOT_Open()
スナップショット作成の開始
スナップショット機能の最初に、この関数が呼び出されます。 ここで、スナップショット用ファイルを生成するための初期化を行ってください
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー
IMPL_SNAPSHOT_Write
-
int IMPL_SNAPSHOT_Write(const void *pData, size_t size)
スナップショットデータの書き込み
スナップショットの内容が通知されます。このAPIは1回のスナップショット動作で複数回呼び出されます。 呼び出された順に、ファイルの先頭からこのデータを書き込んでください。
- パラメータ
pData -- スナップショットデータへのポインタ
size -- スナップショットデータのサイズ(byte)
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー
IMPL_SNAPSHOT_Close
-
int IMPL_SNAPSHOT_Close()
スナップショット作成の終了
スナップショット機能の最後に、この関数が呼び出されます。 ここで、スナップショット用ファイルの終了処理を行ってください。
- 戻り値
SOLID_ERR_OK
: 正常終了それ以外: エラー