組み込みシステムの開発において、デバッグとログ出力は、コードの正しさを保証しパフォーマンスを最適化するために不可欠です。システムの状態をリアルタイムで監視し、異常動作を捉え、重要なデータを記録することで、開発者は問題の特定や機能の検証を迅速に行うことができます。リソースに制約のある組み込み環境では、適切なデバッグツールや手法を選択することが開発効率に大きな影響を与えます。
NXP が発売した高性能マイクロコントローラ MCXN947 は、複数のデバッグおよびログ記録ソリューションを提供しますが、その中で最もよく使用されるのは ITM (Instrumentation Trace Macrocell) と UART 印刷です。ITM は Cortex-M コアのデバッグ機能を活用して、デバッグ インターフェースを介して高速でデータを送信し、厳格なリアルタイム要件のあるシナリオに適しています。一方、UART 印刷は、UART ペリフェラルを介してログを出力するため、汎用性が高く、生産環境に適しています。
この記事では、MCUXpresso IDEにおいてこれら2つの出力手法の使い方を解説し、開発効率とシステムの信頼性を向上させる方法を説明します。
動作原理:
ITM(Instrumentation Trace Macrocell)は、Cortex-Mコアが提供するデバッグ機能です。SWOを用いてデバッグ・インターフェース(例:SWD/JTAG)を通じてリアルタイムでデータを送信します。開発者はITM_SendChar()関数を使用してデバッグ情報をITMポートに送信し、送信されたデータはデバッガによって取得され、IDEのデバッグコンソールに表示されます。
メリット:
デメリット:
動作原理:
UART出力は、UARTペリフェラルを介してデバッグ情報をシリアル端末に送信します。開発者は通常、printf関数をUARTにリダイレクトすることでログ出力用の標準ライブラリ関数を有効にします。データはTX/RXピンを通じて送信され、シリアルツール(例:PuTTY、Tera Term)を使用してPCで閲覧できます。MCUXpresso IDEには、UARTデバッグ用のターミナルも統合されています。
メリット:
デメリット:
以下の表は、ITMとUART出力の主な特徴をまとめたものです。
| 特長 | ITM | UART印刷 |
|---|---|---|
| 伝送速度 | 高速(10 Mbps以上) | 低速(一般的に115200 bps) |
| CPUオーバーヘッド | 低 | より高い |
| ペリフェラル依存 | なし | UARTペリフェラル & ピンが必要です |
| デバッガ依存 | 必須 | 不要 |
| 生産適合性 | 適していません | 適している |
| 設定の複雑さ | 複雑な | シンプル |
| リアルタイムのパフォーマンス | ハイ | 低 |
使用シナリオ:
ハードウェア要件:チップのSWOピンがデバッガのSWOインターフェースに接続されていることを確認します。
ソフトウェアの設定:
1) 新規プロジェクト作成時に、「Redirect printf/scanf to ITM」を選択して printf/scanf をITMにリダイレクトします。
2) Traceクロックを設定します。
/*!< Switch TRACE to TRACE_DIV */
CLOCK_AttachClk(kTRACE_DIV_to_TRACE);
/*!< Set up dividers */
/*!< Set TRACECLKDIV divider to value 3 */
CLOCK_SetClkDiv(kCLOCK_DivTraceClk, 3U);
4)ITMコンソールで出力結果を確認します。
1)新しいプロジェクトを作成する際は、SDKデバッグコンソールをUARTに設定し、デバッグコンソールでUARTを使用するように構成します。
2) MCUXpresso IDEのペリフェラルツールを使用して、DebugConsole-UARTを設定します。
3) Pinsツールを使用して、UART TX/RXピンを設定します。
4)シリアルハードウェアを接続し、ターミナルで出力結果を確認します。
ITMとUART出力にはそれぞれ利点があります。開発者はプロジェクトの要件に基づいて適切な方法を選ぶべきです。ITMは開発中の高いリアルタイム性が求められるデバッグに適しています。一方で、UART出力は実稼働環境や一般的なデバッグに最適です。