産業機器、オーディオ製品、通信デバイスをはじめとする多くの組み込みアプリケーションは、わずかなタイミングの違いで動きが変化します。そのため、開発・検証のためにprintfなどを仕掛けることが難しく、開発効率が伸び悩むケースも増えています。そこで今回の実験室では、システムを止める事なく内部状態を取得できるデータ計測ツール「EVRICA」を紹介いたします。組み込みアプリケーションの開発や検証に欠かせない、新しい開発ツールです。
EVRICAが開発に貢献しているアプリケーション例を見る EVRICA無料貸出をご希望される方はこちらから 利用しているユーザの声を見る
止めることができない、組み込みアプリケーション
組み込みアプリケーションの開発現場では「システムの動きを止めずに、内部状態を取得し、開発や品質保証に活用したい」という声が高まっています。
1ms未満のジッタすら許されないアプリケーションを、いかに解析するか
ロボットアームなどのFA機器、LoRa/BLEなどの通信機器、映像機器やオーディオ機器といった最先端の組み込みアプリケーション。これらを制御するマイクロコントローラには、高速な動作のみならず、1ms未満のジッタ(実行時間のゆらぎ)すら許されない精密なタイミング制御が求められています。そのため、組み込みアプリケーションの解析は年々難しさを増しています。
例えば、リアルタイム性が求められる産業用ネットワークシステムを検証する場合、開発者お馴染みのprintfを使うと、UARTの通信速度制約(例:115200bps)により、遅延が発生。システムを厳密に検証できません。もちろん、デバッガのブレークポイント機能を使えば、たちまち通信はタイムアウトしてしまうでしょう。こうした理由から、システムに影響を与えることなく、システムを止めずに解析できる手法が求められています。
不具合解析に必要なデータを、いかに正確に収集するか
開発者を悩ませるタイミングバグ。わずかなソースコードの変更が、無関係な機能の実行タイミングを変化させ、不具合が顕在化する現象です。近年の組み込みアプリケーションには、オープンソースをはじめとする既存の開発資産が多数流用されているため、ひとたびタイミングバグが発生すると、原因の特定は非常に困難です。タイミングバグの解決には、実行タイミングを変えずに、不具合の発生した時点の内部状態を正確に収集する必要があります。
情報を収集するための工数を、いかに抑えるか
printfを使った開発では、情報を収集する工数を知らず知らずのうちに浪費しがちです。例えば不具合を修正する場合、原因を推定・仮定し、対応する情報が格納されているアドレスを調べ、表示するためのprintfを挿入。ビルドし直して、不具合が発生するまで実行。printf出力を解析し、ようやく情報を入手できます(下図)。実際の現場では、必要な情報にたどり着くまでに、何回もこのサイクルを実施することも多いでしょう。そのため手間をかけず情報を収集できる仕組みが、効率的な開発には欠かせません。
CPUに頼らないデータ計測ツール「EVRICA」
EVRICAは、プログラムに手を入れることなくメモリの内容やハードウェア状態を収集できる「データ計測ツール」です。EVRICAは、Arm® Cortex®-A/Cortex-R/Cortex-Mに搭載されている「CoreSight」というハードウェア機能を活用し、CPU上で動くプログラムと独立して最高25MHzで内部状態を収集できます(二個目のCPUのように振舞うことができます)。EVRICAはArm Cortexの基本的なハードウェア機能のみを利用するため、数多くのメーカーがリリースしている様々なシステムや評価ボードに接続することができます。今後も対応機種は増えていくでしょう。
EVRICAが開発に貢献しているアプリケーション例を見る
EVRICAの特長とは!
EVRICAの製品コンセプトは、次の通りです。下図に挙げている、開発に便利な機能を提供します。
- ユーザプログラムへの改変なし
- JTAG/SWDからサンプリング可能
- 最速6.5μs/点の高速データ取得を実現
- 128点の多チャンネル測定可能
- 測定データをHDDに長時間記録
EVRICAを使って、ロボットを開発しよう
タイミング変化に敏感なロボットアームの内部状態を、EVRICAで可視化してみましょう。ロボットアームは、内部状態の可視化のためにprintfやブレークポイントを使ってしまうと、タイミングが変化し動作が変わってしまうため、従来の手法では内部状態を計測困難なアプリケーションの一つです。実際の様子は動画をご覧ください。
6軸ロボットアームの内部状態を、システムを止めずに取得する
今回は、サーボモータを組み合わせた6軸ロボットアームを使います。制御部はSTM32F4DISCOVERYを使って実装しました。STM32F4DISCOVERYは、STマイクロエレクトロニクス社製STM32F407マイクロコントローラ評価ボードで、Cortex-M4Fを内蔵し、サーボモータの角度指定に使えるPWM波生成用ハードウェア(TIMx)を搭載しています。
制御部の回路を下図に示します。EVRICAを接続するための2.54mm 20pinのSWDコネクタを搭載しています。また、EVRICAによる内部状態の取得と、printfによる内部状態の取得を比較するため、USB-UARTポートも搭載しています(比較結果は動画をご覧ください)。
EVRICAをセットアップする
EVRICAの操作は、とても簡単です。以下の、わずか5個の手順しか必要としません。なお、インストール方法や各種設定方法、取得したデータの解析方法の詳細を知りたい方はEVRICA同梱のPDFマニュアル(フルカラー)をご利用いただけます。
- EVRICAとPCを繋ぎ、電源を投入し、ターゲットシステムと接続。
- 「MPU固有設定」を行う。
- ウォッチする「アドレス変数」を指定する。
- 計測を開始する。
- 「波形グラフ」、「変数ウォッチ」で計測結果を可視化する。
ケーブルを接続する
まず、EVRICAとPCをUSBで接続し、EVRICAとターゲットとなるシステム(今回はロボットアームの制御部)をArm JTAG/SWD 2.54mm 20pinケーブルで接続します。1.27mm 10pin/20pinのJTAG/SWDコネクタ用の接続ケーブルもDTSインサイトから提供されています。
ターゲットハードウェアを設定する(MPU固有設定)
次に、ターゲットとなるハードウェアを指定する「MPU固有設定」を行います。今回は、STマイクロエレクトロニクス社製のCortex-M4搭載システムがターゲットとなるため、メーカー「Other」、SoC「SoC Cortex-M」、コア「Cortex-M4」を選択します。本設定により、詳細設定にあるインターフェース「SWD」や通信周波数「17MHz」が自動的に生成されるため、手動での詳細設定は特に必要ありません(なお今回の実験では、さらに高速にデータを収集するため、通信周波数を「25MHz」に設定しました)。
データ計測対象となるアドレスを指定する
続いて、データ計測したいメモリアドレスを設定します。今回の動画では、STM32F4DISCOVERY内のPWM生成用ハードウェアのアドレス0x40000000〜0x40000050を設定しました。グラフには、PWMの基本周期となる0x40000024(TIM2_CNT)と0x40000038(TIM2_CCR3)を表示しています。各レジスタの詳細についてはSTM32F407の仕様書をご参照ください。
システムの内部状態を計測し、可視化する
最後に「計測ボタン」をクリックするとシステムの内部状態を計測できます。従来のデバッガでは、登録したアドレス変数の値を見るにはブレーク(CPUの一時停止)が必要でしたが、EVRICAはシステムを止める事なく、最高25MHzで最新の内部状態を取得、表示できます。
波形として表示する
「波形グラフ」機能を使うことで、時間軸方向の値の変化を見ることができます。今回は、サーボモータの角度を決めるPWM波生成用の基本クロック値(下図上)と、PWM波のデューティ比を決めるための閾値を(下図下)表示しました。EVRICAは最大32本の波形を同時に描画できます。
変数ウォッチにて値を表示する
「変数ウォッチ」機能を使うことで、各アドレスに格納されている最新の値を見ることができます。16進数表示はもちろん、符号付きの10進数表示や、ビットマスクや倍率を掛け合わせた加工値を表示することもできます。また、最小値と最大値も表示されるため、異常な範囲の値を取っていないかの確認や、波形グラフを表示する際の縦軸の目安に使うこともできます。
EVRICAのさらなる特長
今回紹介した以外にもEVRICAには開発に便利な、下記の機能が含まれています。是非ご活用ください。
- プログラムへの変更は一切不要
- 活線挿抜にも対応
- 同時32ch波形表示、同時128ch変数表示
- トリガ機能
- 測定値を加工して表示する機能
- 経過時間計測機能
- メモリライト機能
- 計測データ保存機能
- 計測を自動化するスクリプトも設定可能
まとめ
デバッガでブレークポイントを設定したり、printfを挿入したりといった従来のソフトウェア開発手法は、検証の度に大きな工数が必要でした。また、これらの手法ではタイミングバグを正確に調査することは困難です。EVRICAは、こうした開発者の悩みから生まれた「DTSインサイトならでは」の開発ツールです。システムを止めずに解析できる新しい手法を、最新の組み込みアプリケーション開発へ是非ご活用ください。
EVRICA無料貸出をご希望される方はこちらから
利用しているユーザの声を見る
こちらも是非
“もっと見る” 実験室
IoTエッジコンピューティングをSmartMeshで実践
今回の実験は、Moteに内蔵されている非力なマイコンを使って、振動計測ソリューションのFFTデータをSmartMeshで送信したIoTエッジコンピューティングを実践してみました。
非絶縁型中間バスコンバータ750Wで、48Vと12Vを自由自在
VicorのNBMシリーズの最新デバイスであるNBM2317シリーズは、23×17×7mmという超小型パッケージで最大750W出力、48V→12Vまたは、12V→48Vの双方向において98%のピーク効率を実現した非絶縁型中間バスコンバータ。今回の実験室は、実際に動かしつつ、その性能とメリットを解説している。その様子は、是非動画で見て欲しい。
センサーイベント発生!そんな時だけネットワークへ参加できるBLINKモード
SmartMeshには、ある特定のイベントが発生した場合だけネットワークに参加するという機能があります。それが、「Blinkモード」です。今回は、通常のMoteとBlinkモードに設定されたMoteの違いを試してみます。