スナップショット¶
スナップショット機能は、実行中の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: 正常終了
- それ以外: エラー