メディア

Virtual Starter Kitを活用した「組み込みソフトウェア初期デバッグ」のすすめ組み込みソフトウェア開発の革命

組み込みソフトウェアを開発する上で、ソフトウェアの動作する環境が必要です。本稿では、Windows PC 1台でソフトウェアのデバッグおよび動作確認を可能にする「Virtual Starter Kit」について紹介します。

» 2014年10月08日 10時00分 公開
[PR/EE Times]
PR

動かせばすぐ分かる「初期デバッグ」の実情

 近年の組み込みソフトの肥大化は著しく、製品開発のうちソフトウェア開発の占める割合も大きくなっています。ソフトウェアの効率的なデバッグ・テストが急務の中、高価な測定機器は必要な台数をそろえられないのが実情です。今までは、ICEなどでメモリの値やレジスタの値を基にデバッグし「たぶん、大丈夫」というソフトウェアを実装し、測定機器や外部デバイスのつながった環境で動作確認していました。ソフトウェアのバグの大部分は、このように動かせば、すぐに分かる「初期デバッグ」に集中します。しかし、従来の実機を使ったデバッグでは、開発者1人当たり1台のデバッグ環境が準備できなければ、環境の取り合いになってしまい開発効率がなかなか上がりません。

 この問題を解決するために登場したのがスパンションの「Virtual Starter Kit」です。Virtual Starter Kitは、組み込みソフトウェア開発者向けに作られたWindowsPC1台で動作するマイコンシミュレーション環境で、波形を確認しながらの初期デバッグはもちろん、ペリフェラルのパラメータ調整などにも利用できます。

Virtual Starter Kitを使ってみよう

 無償で提供されている評価版を利用してみましょう。

1.まずはVirtual Starter Kitのインストール!
  ――ダウンロード〜インストール〜粗動作確認――

 スパンションのVirtual Starter KitのWebページ(図1)へアクセスします。Virtual Starter Kitに関する資料や仕様書も同Webページからダウンロードすることができます。

図1 Virtual Starter KitのWebページ

 ページ下方「評価版」の表内「Spansion_VSK_MB9B510R.zip」(図2:1)をクリックします。

図2 Virtual Starter Kit評価版

 使用許諾(図3:1)をよく読み、必要事項(図3:2)を記入し、同意ボタン(図3:3)を押します。

図3 Virtual Starter Kit評価版の使用許諾画面

 使用許諾に同意するとVirtual Starter Kit評価版がダウンロード(図4:1)できます。

図4 Virtual Starter Kit評価版ダウンロード画面

 ダウンロードしたzipファイルを展開するだけでインストール作業は完了です(図5)。

図5 Virtual Starter Kit評価版インストール画面

 ファイルが正しく展開されていることを確認するために粗動作確認をします。

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。

 FM3 Simulatorが図6のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。

図6 Virtual Starter KitのFM3 Simulatorによるターミナルプログラム接続待ち画面

 ターミナルプログラム(TeraTermなど)を図7のような接続設定でFM3 Simulatorに接続します。

Host :localhost(図7:1

TCP port# :1204(図7:2

Service :Other(図7:3

図7 ターミナルプログラム接続設定画面

 すると、GUI等含め図8のようにVirtual Starter Kitが起動します。

図8 Virtual Starter Kit評価版スクリーンキャプチャ

 Virtual Starter Kit評価版は、図9に示すシステム構成になっています。

※評価版では、システム構成を変更することができません。製品版を利用することでシステム構成の変更が可能になります。


図9 Virtual Starter Kit評価版システム構成

 Virtual Starter Kitが正しく動作していることを確認するため、図10に示す外部割込みGUIのボタンを押してください(複数あるGUIウィンドウの内、タイトルバーに「INT0-7」と書かれたウィンドウ(図10:1)が外部割込みGUIです)。

図10 Virtual Starter Kit評価版 外部割込みGUIウィンドウ

 押したボタンに応じて割込みが発生したことを通知するメッセージがターミナルプログラムウィンドウに表示されます(図11はbit2 → bit4 → bit7の順番に押した例)。

図11 外部割込みが発生したことを伝えるメッセージの表示画面

 動作確認ができたら、図12に示す通りFM3 Simulatorウィンドウのxボタンを押して終了してください。

図12 Virtual Starter Kit評価版 FM3 Simulatorウィンドウ

2.組み込みソフトウェアの準備
  ――テンプレートプロジェクトの利用〜ソフトウェアコーディング――

 本稿では、FM3マイコンのペリフェラル(ベースタイマ)を利用して任意のPWM信号を出力する組み込みソフトウェアを作成します。ソフトウェアの処理フローは図13の通りです。

図13 PWM信号出力ソフトウェア処理フロー

 Virtual Starter Kitを利用してソフトウェアの初期デバッグをするところに主眼を置くため、PWM信号についての詳細や、Start up処理、ベースタイマ利用方法などについては説明しません。詳細は、スパンションで準備しているアプリケーションノートなどを参考にしてください。

 今回はStart up処理記述や、IDEの設定があらかじめ行われているテンプレートプロジェクトを利用してソフトウェアを書いていきます。テンプレートプロジェクトはFM3ファミリのサンプルプログラムダウンロードのページからダウンロードすることができます(図14)。

図14 FM3ファミリのサンプルプログラムダウンロードページ

 Virtual Starter Kit評価版の対象マイコンはFM3 TYPE4(MB9B510Rシリーズ)です。

 TYPE4の表内「MB9B510Rシリーズ Template Project」を選択します(図15:1)。

※執筆時点では「 mb9b510r-series-201408.zip 」でした。最新版を入手してください。


図15 MB9B510Rシリーズ テンプレートプロジェクト

 使用許諾(図16:1)をよく読み、必要事項(図16:2)を記入し、同意ボタン(図16:3)を押します。

図16 MB9B510Rシリーズ テンプレートプロジェクト使用許諾画面

 使用許諾に同意するとMB9B510Rシリーズ テンプレートプロジェクトがダウンロードできます(図17:1)。

図17 MB9B510Rシリーズ テンプレートプロジェクトダウンロード画面

 ダウンロードしたzipファイルを展開します。

図18 MB9B510Rシリーズ テンプレートプロジェクト展開画面

 IDEはIARシステムズ社のEWARMを利用してソフトウェア開発することにします(EWARMは事前にインストールしておいてください)。展開した\mb9b510r-series-201408\mb9bf51xr_template-v18\example\IAR\mb9bf51xr_template.ewwをダブルクリックしてIDEを起動します(図19)。

図19 EWARM起動画面

 この状態で、クロックの設定などStart up処理に続いてmain関数がコールされるソフトウェアのプロジェクトが起動されます。あとは、main関数の中身を書き換えるだけで任意のソフトウェアが記述できるようになっています。

 それでは、処理フロー「初期化処理」から「無限ループ」までのソースコードをmain関数に記述します。テンプレートプロジェクトのmain関数を削除して、下記の通りのmain関数に書き換えてください。

int32_t main(void)
{
/* PWMの設定 */
#define PERIOD 100.0  /* 周期100usec */
#define DUTY   60.0   /* デューティ60% */
/*  |← 60% →|      |← 60% →|                         */
/*  :         :      :         :                         */
/* _|~~~~~~~~~|______|~~~~~~~~~|______|~~~~~~~~~|_・・・ */
/*  :                :                :                  */
/*  |←  100usec   →|←  100usec   →|                  */
  //
  //  ローカル変数定義
  //
  uint16_t tmcr = 0U;
  uint8_t tmcr2 = 0U;
  uint16_t period = 0U;
  uint16_t duty = 0U;
  float clock = 72000000.0; /* 周辺クロック 72MHz */
  float tmpVal = 0.0;
  //
  //  初期化処理
  //
  /* PWM出力のリロケート */
  FM3_GPIO->PFR4 = FM3_GPIO->PFR4 | 0x0001;  /* Unuse P40 */
  FM3_GPIO->DDR4 = FM3_GPIO->DDR4 | 0x0001;  /* Output BaseTimer */
  FM3_GPIO->EPFR04 = (FM3_GPIO->EPFR04 & 0xFFFFFFF0) | 0x00000004; /* Use TIOA0_0 */
  /* ベースタイマ設定 */
  FM3_BT0_PWM->TMCR = 0U;       /* ベースタイマ初期化 */
  tmcr2 = (uint16_t)0U;         /* カウントクロックφ */
  tmcr = ((uint16_t)0 << 12) |  /* カウントクロックφ */
         ((uint16_t)0 << 11) |  /* 再起動禁止 */
         ((uint16_t)0 << 10) |  /* パルス波形通常出力 */
         ((uint16_t)0 <<  8) |  /* トリガ入力無効 */
         ((uint16_t)1 <<  4) |  /* 16ビットPWMタイマモード */
  //     出力波形の極性を反転にしています。
  //     ((uint16_t)0 <<  3) |  /* 正:出力極性:通常(初期出力:L -> デューティ一致:H -> アンダーフロー:L) */
         ((uint16_t)1 <<  3) |  /* 誤:出力極性:反転(初期出力:H -> デューティ一致:L -> アンダーフロー:H) */
         ((uint16_t)0 <<  2) |  /* 連続動作 */
         ((uint16_t)0 <<  1) |  /* カウント動作禁止 */
         ((uint16_t)0 <<  0);   /* カウント動作停止 */
  FM3_BT0_PWM->TMCR = tmcr;     /* タイマ制御レジスタ設定 */
  FM3_BT0_PWM->TMCR2 = tmcr2;   /* タイマ制御レジスタ設定 */
  FM3_BT0_PWM->STC = 0U;        /* 割込み禁止 */
  //
  //  PWM波形計算
  //
  /* 周期 */
  tmpVal = PERIOD / ( 1000000.0 / clock );
  period = (uint16_t)tmpVal;
  /* デューティ比 */
  tmpVal = tmpVal * DUTY / 100.0;
  duty = (uint16_t)tmpVal;
  //
  //  PWM波形出力開始
  //
  FM3_BT0_PWM->PCSR = period;  /* 周期設定 */
  FM3_BT0_PWM->PDUT = duty;    /* デューティ設定 */
  FM3_BT0_PWM->TMCR = FM3_BT0_PWM->TMCR | ((uint16_t)1 << 1);  /* カウント動作許可 */
  FM3_BT0_PWM->TMCR = FM3_BT0_PWM->TMCR | ((uint16_t)1 << 0);  /* カウント動作開始 */
  //
  //  無限ループ
  //
  while(1){
    __WFI();   /* Wait For Interrupt(割込み待ち) */
  }
}
main関数コード

 上のソフトウェアは周期100usec(H60% L40%)のPWM出力をさせることを意図したものです。ただし、バグが挿入してあり出力が反転してHとLのデューティ比が逆になるようにしてあります。このソフトウェアをVirtual Starter Kit評価版を利用してデバッグしていきます。

3.デバッグしよう
  ――IDE接続〜信号トレース設定〜デバッグ――

 ソフトウェアをデバッグするためには、FM3 SimulatorにIDEを接続し、目的の信号(PWM出力信号)を確認する必要があります(図20)。

図20 Virtual Starter Kit評価版とIDEの接続および、信号トレース

3-1.IDE接続方法

 Virtual Starter Kit評価版とIDEの接続は、FM3 SimulatorのGDBサーバへIDEを接続することで実現します。

 デバッグ用の実行バイナリを生成するためにワークスペースウィンドウの構成ドロップダウンメニューから「MB9BF512R_Debug」を選択します(図21:1)。

図21 ワークスペースウィンドウの構成ドロップダウン画面

 次にプロジェクトのオプションをVirtual Starter Kit評価版用の設定に変更します(図22:1)。

図22 プロジェクトのオプション設定画面

 Virtual Starter Kit評価版のリセットベクタの配置先は、コアのデフォルト位置になります。カテゴリ「リンカ」(図23:1)の「デフォルトのオーバーライド」のチェックを外し(図23:2)、デフォルト配置に設定します。

図23 リンカ設定画面

 Virtual Starter Kit評価版はデバッガの接続をGDBサーバで行います。

 カテゴリ「デバッガ」(図24:1)の「ドライバ」をGDBサーバに設定(図24:2)します。

図24 デバッガ設定画面

 次にGDBサーバへの接続設定を行います。

 カテゴリ「GDBサーバ」(図25:1)のホスト名をlocalhost、ポート番号を1234に設定(図25:2)します。

図25 GDBサーバ接続設定画面

 実行バイナリイメージファイルを生成するためプロジェクトのすべてを再ビルドします(図26:1)。

図26 実行バイナリイメージファイルのビルド画面

 FM3 Simulatorの設定を変更します。

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\cpu.ini 」をテキストエディタで編集します。

  • FM3 Simulatorで実行する実行バイナリイメージを上のプロジェクトで生成した実行バイナリイメージ「 mb9bf51xr_template.out 」に変更します(図27:1
  • GDBサーバを有効にするためにGDB_STUB_PORTのコメントアウト記述子「;」を削除します(図27:2
図27 FM3 Simulator設定変更画面

3-2.PWM出力信号確認方法

 信号トレース機能を利用して、VCDフォーマットファイルの出力を行います。そのVCDフォーマットファイルを既存のビューアで表示しPWM出力信号を確認します。

 信号トレースファイルの出力先を設定するために、「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\svcd.ini 」をテキストエディタで編集します(図28:1)。

図28 信号トレースファイル出力設定画面

 トレースする信号の選択は「 \Spansion_VSK_MB9B510R\VirtualStarterKit\configuration\trace.ini 」の修正で行います。今回はPWM信号をトレースしたいので信号名「TIOA0」をONに修正します(図29:1)。

図29 トレースする信号の選択画面

 Virtual Starter Kit評価版でトレース可能な信号の一覧を表1に示します。

表1 Virtual Starter Kit評価版でトレース可能な信号名一覧
ペリフェラル トレース可能信号 ペリフェラル トレース可能信号
電源 VCC マルチファンクション
シリアル
SINx
AVCC SOTx
AVRH SCKx
AVSS 多機能タイマ DTTIxX
ADC ADTG_x FRCKx
ANxx ICxx
BaseTimer TIOAx RTOxx
TIOBx DTIFx
外部割込み INTxx クアッドカウンタ AINx
NMIX BINx
GPIO Pxx ZINx
リセット INITX クロック Xx
外部バス EXTBUS XxA
CROUT
注:“ x ”(小文字エックス)にはチャネル番号やポート番号などが入ります

 VCDフォーマットファイルのビューアは既存のものを利用します。今回はオープンソースソフトウェアの、GTKWaveを利用します。

 http://sourceforge.net/projects/gtkwave/files/から最新のGTKWaveをダウンロードします(執筆時点での最新版は、gtkwave-3.3.61-bin-win32でした)。インストールは、ダウンロードしたzipファイルを展開するだけです。展開した「 \gtkwave\bin\gtkwave.exe 」をダブルクリックすると、GTKWaveを起動することができます(図30)。

図30 GTKWave起動画面

3-3.Virtual Starter Kitを利用したデバッグ手順

 全ての準備が整いましたので、Virtual Starter Kit評価版を利用してデバッグしましょう。

 手順は以下になります。

  1. Virtual Starter Kit起動
  2. ターミナルプログラムをFM3 Simulatorに接続
  3. IDEをFM3 Simulatorに接続
  4. デバッグ実行開始
  5. 波形確認

3-3-1.Virtual Starter Kit起動

 「 \Spansion_VSK_MB9B510R\VirtualStarterKit\VirtualStarterKit.bat 」を実行します。

 FM3 Simulatorが図31のように、UARTモデルへターミナルプログラムが接続されるまで待ちつづけます。

図31 Virtual Starter KitのFM3 Simulatorによるターミナルプログラム接続待ち画面

3-3-2.ターミナルプログラムをFM3 Simulatorに接続

 TeraTermなどターミナルプログラムを図32のような接続設定でFM3 Simulatorに接続します。

Host :localhost(図32:1

TCP port# :1204(図32:2

Service :Other(図32:3

図32 ターミナルプログラム接続設定画面

 すると、GUIなど含めてVirtual Starter Kitが起動し、FM3 SimulatorはIDEからのデバッグ接続を待ちます。

3-3-3.IDEをFM3 Simulatorに接続

 IDEを起動して、あらかじめ準備しておいた実行バイナリイメージファイルをダウンロードしてデバッグします(図33:1)。

図33 IDEのデバッグ接続画面

3-3-4.デバッグ実行開始

 ダウンロードが完了すると、デバッガはデバッグ開始待ち状態でブレーク(図34:1)します。

図34 デバッグ開始待ちブレーク画面

 デバッグ実行すると、Virtual Starter Kitは、シミュレーションを開始し、PWM信号をトレースファイルに出力します。

3-3-5.波形確認

 GTKWaveを起動したWindow内に信号トレースファイルをドラッグアンドドロップします。

 するとGTKWaveは図35のように信号トレースファイルを読み込みます。

図35 GTKWaveトレースファイル読み込み直後の画面

 PWMの波形を確認するために以下の操作を行います。

 ペリフェラルの「BTIMER」(図36:1)を選択した後、信号の「TIOA0」(図36:2)を選択し「Append」(図36:3)ボタンを押す。

 信号波形が表示されたら、「+」「−」ボタン(図36:4)を押してタイムスケールを調整する。

図36 PWM信号表示画面

 それでは、PWM信号波形を確認しましょう。現在のソフトウェアが出力する信号波形は以下のようになっています。周期は、100usecで意図した通りですが、Hの区間が40usecということで、40%になっています。

図37 PWM信号の波形解析画面(バグあり状態)

 原因を確認するために、IDEのブレークボタン(図38:1)を押してみます。

 すると、無限ループ内でブレーク(図38:2)し、ペリフェラルのレジスタに設定した値を確認することができます(レジスタ表示に限らず、メモリダンプ、変数のウオッチも可能です)。周期を設定したPCSRレジスタ値(0x1C20)とデューティ比を設定したPDUTレジスタ値(0x10E0)の比を計算すると、59.75%とソフトウェアとしては正しく計算した値を設定していることが分かります(図38:3)。そこで他のレジスタ設定値を確認すると、タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が反転(1)設定になっていることが確認できます(図38:4)。

図38 デバッグのためにブレークした画面

 それではソフトウェアを修正するために一度、デバッグ実行を停止して、ソースを修正し(図39:1)再ビルドして、同様の手順でデバッグ実行を行います。

図39 ソフトウェアの修正画面

修正後のソフトウェアが出力する波形は図40のようになります。PWM波形を解析してみると、意図した通り周期100usec、H60%のPWM波形が得られていることが確認できました。これでデバッグが完了です。

図40 PWM信号の波形解析画面(バグなし状態)

 レジスタへの設定値も確認するために、IDEのブレークボタン(図41:1)を押してみます。

 先ほどと同様、無限ループ内でブレーク(図41:2)します。タイマ制御レジスタ(TMCR)の出力極性ビット(OSEL)が通常(0)設定になっていることが確認できます(図41:3)。

図41 正常動作確認のためにブレークした画面

 このように、初期デバッグ時は、動作確認することができれば、すぐに分かるバグが大半です。しかし動作確認できない(信号を確認できない)環境では、なかなかバグに気付くことができません。Virtual Starter Kitは、WindowsPC1台で動作確認まで実施することが可能です。高価な計測機器(オシロスコープやロジックアナライザなど)も評価ボードもICEさえも必要ありません。初期デバッグには強い味方になるツールです。

Virtual Starter Kit活用例:システム環境でパラメータ調整

 製品版Virtual Starter Kitを利用すると、マイコンにつながるデバイスのモデルも一緒にシミュレーションすることができます。システム環境が再現されますので、フィードバックループ処理のパラメータ調整などもできます。

 一例として、水をヒーターで設定温度にあたためるアプリケーションの開発を以下に紹介します。

 図42のような構成のシステムを作成し、水をあたためるパワーの計算にフィードバックループ処理が入っています。

図42 Virtual Starter Kit貯湯器システム構成例
図43 水温計算モデルとソフトウェアのフィードバックループ模式図

 この環境を準備することで、ソフトウェアのPID制御用各定数を水温の変化を確認しながら調整することが可能になります。

今後の展開

 まだまだ、シミュレータを利用したソフトウェア開発の歴史は浅く、今後期待されている分野です。Virtual Starter Kitも現在はFM3ファミリのみですが、スパンションではFM4ファミリ、FM0+ファミリへの展開も計画しています。効率的なソフトウェア開発のためにVirtual Starter Kitの活用をおススメします。


Copyright © ITmedia, Inc. All Rights Reserved.


提供:Spansion Inc.(スパンション)
アイティメディア営業企画/制作:EE Times Japan 編集部/掲載内容有効期限:2014年11月7日

ニュースリリース/トピックス/イベント

大容量かつ機能安全適合が求められる車載環境に特化して設計されたSemper NORフラッシュが、次世代ADASシステムのさらなる進化に向けて東芝の先進運転支援システムViscontiファミリに採用。

12月9日13時(アメリカ東部時間)よりハンズオンワークショップを開催。超低電力かつ柔軟性と安全性を兼ね備えたPSoC 6 MCUの他、Modus 2.0とArm Mbedを用いてクラウド接続のIoTエッジノードの開発方法を解説します!

Modus Toolbox 2.0では、1つのプラットフォームでPSoC MCUとBLE、Wi-Fi、MeshなどCypressソリューションの設計が可能。MbedやFreeRTOSもサポートしており、GitHubでサンプルコードのダウンロードが可能

メインストリームおよびエントリーレベルのノートPC/デスクトップPC向けに、コスト効率に優れたシングルポートUSB-Cコントローラーを発表!従来のUSB Type-AポートからUSB Type-Cポートに移行する必要があるシステムに最適。

多くのHMIが容量センシング技術と誘導センシング技術に移行しています。サイプレスのCapSense容量センシングとMagSense誘導センシングを活用して、HMIアプリケーションの設計方法を解説します。ぜひご参加ください。

無償サンプル/ツール

弊社の販売代理店よりサンプル品をオーダーすることが可能です。上記サイトより、ご希望の代理店を選択してください。

PSoCやCapSence、USBコントローラーなど、Cypress製品を使ったデザイン設計が可能なソフトウェアおよびドライバーを無償でダウンロードいただけます。

Cypress製品のあらゆるドキュメントをダウンロード可能なサイプレス ドキュメント マネージャー (CDM) を提供しています。CDMソフトウェアは上記よりダウンロードが可能です。

販売代理店(順不同)

RSSフィード

公式SNS

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.