適用先: ULINK USB-JTAG Debugger
この記事に含まれている情報の適用先:
- Cortex-M3 ベースのデバイスでのシリアル接続デバッグとリアルタイムトレース
現象
Cortex-M3 ベースのデバイスでシリアル接続リアルタイムトレース機能を使用していると、Logic Analyzer が変数を適切に更新しません。
原因
Logic Analyzer は収集したトレース レコードに基づいてデータ値をグラフィック表示する以外にも、トレース データの一部を可視化します。Logic Analyzer の定義済み変数は、データの読み出し / 書き込みイベントに対するトレースのセットアップを直接制御します。
Serial-Wireリアルタイムトレース機能には、トレース対象の変数について、いくつかの制限があります。
- トレース対象の変数は、明示的な書き込み / 読み出しアクセスによって更新する必要があります。
DMA によって変更される変数は、トレースできません。変数を明示的に読み出すか書き込んで、トレース レコードを生成する必要があります。 - トレース対象の変数の更新頻度が多すぎます。
変数が更新されるたびに、トレース レコードが作成されます。処理が間に合わないほどのペースでトレース レコードが ULINK2 に送信された場合、µVision のステータス バーに Trace: HW Buffer Overrun というメッセージが表示されます。
解決策
トレースの制限を克服する方法として、トレース専用のグローバル変数を使用する方法が考えられます。以下に例を示します。
- DMA で使用される変数の値をトレース用のグローバル変数に適正な頻度で格納します。
- 頻繁に更新される変数の値をグローバル変数に格納して、そのグローバル変数を適正な頻度でトレースします。たとえば、10 回目の更新ごとにトレースするような処理で十分であると考えられます。