進化するCortex-Mシリーズ搭載マイコンのデバッグ
ARM Cortex-M3を搭載したプロセッサは,現在の組み込みシステムにおいて,幅広く利用されるようになってきました.2010年2月には,ディジタル信号処理能力を高めるため,Cortex-M3に浮動小数点演算(フローティング・ポイント)機能を追加したCortex-M4が発表されました.Cortex-M4は,複雑で高機能なアプリケーションを実現したい製品にとって最適なプロセッサです.このようなプロセッサを活用し,高機能なアプリケーションを実現するソフトウェア開発の工程はとても重要ですが,その一方で,製品の信頼性を高め,機能安全を実現するソフトウェア・デバッグや検証も,同様に重要な工程です.
●オンチップ・デバッグ機能CoreSight
Cortex-Mシリーズを搭載したマイコン(MCU)は,ARM CoreSight技術を採用しています.CoreSightは高機能なデバッグとトレースを実現するためのハードウェアで,これを活用するとプログラムの分析や最適化の労力,およびコストを抑えることが出来ます.CoreSightは組み込みシステム開発者にとって有益な機能で,ほかのマイコン・アーキテクチャにはない技術です.
今までのソフトウェア・デバッグでは,プログラムの実行と停止が基本でした.しかしこの手法の場合,ブレークポイントで止めたり,メモリや値にアクセスするためにプロセッサを停止しなければなりません.これは確実に,システムの状態やふるまいを変えてしまいます.そのため,細かいタイミングの解析が行えなくなります.例えば,USBのホストとターゲットが通信している時に実行/停止のデバッグを行うと,通信中の細かいタイミングを解析できません.
CoreSightを利用するとこのような問題は生じません(図1).CoreSightのデバッグ用回路ブロックはCortex-M3プロセッサと密に連携しており,ユーザがCPUをコントロールしたり,Cソース・コードやアセンブリ・コードをシングル・ステップで実行できます.加えて,プロセッサがフルスピードで動作しているときに八つのブレークポイントやメモリのリード/ライト,周辺レジスタのセットアップを行うことが可能です.CoreSightのこのような機能を使うことにより,プロセッサを停止せずに,実際のシステムのふるまいを解析したり,デバッグしたりできるようになるのです.
図1 Cortex-M3におけるCoreSightの構成
●データやイベントを容易にトレースできる
CoreSightはClassic ARMと呼ばれるARM7やARM9のオンチップ・デバック支援機能を拡張したもので,Cortex-M3やCortex-M4のデバイスではデータやイベントのトレース情報を抽出できます.これは,開発者がプログラムの実行を解析する際の強力な武器となります. Keil Microcontroller Development Kit(MDK-ARM)とULINKproデバッグ・アダプタはこのような情報を実行中のシステムからリアルタイムに抽出し,下記のようないくつかの方法で表示します.
- トレース・ウィンドウ――取得したタイム・スタンプ,PCサンプル,リード/ライトのアクセスからプログラム・フローを表示
- デバッグ(printf)ビューワ――Instrument Trace Macrocell(ITM)の出力をprintfスタイルで表示
- 実行ウィンドウ――プログラムの実行や割り込みの静的な情報を表示
- イベント・カウンタ――特定のイベント・カウンタの値をリアルタイムに表示し,アプリケーションの性能を示す
- ロジック・アナライザ――キャプチャしたデータ・トレースの値の変化をグラフィカルに表示.直観的な方法でプログラムのタイミングや実行状況を示す
- RTOSイベント・ビューワ――カーネル認識の情報を表示し,リアルタイムOSのタイミングやタスク・スイッチの情報を示す
Cortex-Mプロセッサがフルスピードで動作すると,1秒ごとに大量のトレース情報を吐き出します.このすべての情報を取り込み,使用するためには,ULINKproのような高速なデバック・アダプタが必要となります.ULINKproはリアルタイムのデータ・トレースを,ターゲットとなるプロセッサからマンチェスター・エンコーディングによって取得します.ほかのマイコンのアダプタと比べて100倍以上も速い速度でトレース情報を取得できます.プロセッサが200MHz以上で動作したとしても,トレースのオーバフローやデータの欠損は生じません.
●命令トレースでコードの実行状況を確認
Cortex-Mシリーズ(Cortex-M0を除く)を搭載したプロセッサについては,ARM Embedded Trace Macrocell(ETM)を使用して命令トレースを行えます注1.
注1:開発したプロセッサ・メーカによって,ETMが付属しているものと付属していないものがある.
ULINKproはストリーミングのデータ命令トレースを取得できる業界唯一のアダプタで,取得したデータは直接ホスト・パソコンのハード・ディスクに書き込みます.このトレースによってシーケンスの履歴や実行結果の分析,コード・カバレッジの解析が行えます(図2).
図2 プログラムのコード・カバレッジ(%)表示
命令トレースには,プログラム上で実行された命令ごとの詳細情報(タイミング情報など)が含まれており,これらの情報はアプリケーションのCソース・コードと同期して表示することが可能です.
ストリーミングの命令トレースによって,これまでブレークポイント型のデバッグを行っていた時にまれに起こるプログラムの問題(通常の方法では,本質的にデバッグが難しい,または不可能な問題)を回避できます.例えば,ブレークポイント型のデバッグでは,プログラムの特定の場所にたどり着いたことを示すだけで,なぜ,どのようにして,その場所へたどり着いたかは解析できません.
このような問題に対処するためには,プログラムがどのように実行され,なぜその場所にたどり着くのかを理解していなくてはなりません.命令トレースでは,問題が起こる前に実行されたすべての命令の履歴を確認できます.これはプログラムがどのように動作したのか,なぜ問題が起きたのか,を診断する際の助けになります.このタイプの解析にブレークポイントの機能だけで対処することは容易ではありません.
ULINKProを使うと,ストリーミングの大量の情報が得られます.MDK-ARMはULINKProを使うことにより,プログラムの完全なコード・カバレッジ情報を取得できます.MDK-ARM のコード・カバレッジ・ツールは,命令とプログラム領域を素早く認識し,どこのコードが実行されたか,そしてどこのコードが実行されていないか,という最も重要な情報を表示します.これは,ソフトウェアの検証やソフトウェア品質の認証において必須の要求事項,例えばIEC 61508の認証において必須の事項となります.さらに詳細な個々の命令の分析は実行ステータスによって色分けされ,テスト手法を改善するのに役立ちます.またこれらの情報については,認証用として実行解析レポートを出力して印刷することも可能です.
MDK-ARMを利用すると,長時間のストリーミング・トレースを実行できます.MDK-ARMが備えるパフォーマンス解析ツールにより,ストリーミング・トレースのデータを使用して性能向上のボトルネックとなる個所を特定し,アプリケーションの最適化を行います.
パフォーマンス解析ツールは,実行時間をアプリケーションの関数ごとに記録し,表示するツールです.図3の右側に表示されている棒グラフは,関数の中で実行された時間と何回コールされたかを示しています.実行プロファイルには,実行された行の実行時間と実行回数が表示されます.これらはエディタや逆アセンブラ・ウィンドウ上のプログラムのどこを最適化すれば良いのかを開発者に示してくれます.
図3 パフォーマンス解析ツール(プログラムのタイミング解析結果やプログラムのふるまいを参照しながら最適化できる)
MDK-ARMを使用すると,プログラムのデバッグや検証をスムーズに進めることができます.MDK-ARMの詳細については,http://www.keil.com/coresight/を参照してください.
うちだ・さち
アーム(株) System Design Division プロダクト マーケティング マネージャー