/Test_you

電子工作やプログラミングなど、やってみたことのメモ

RXマイコンで、Unityによる単体テスト環境を作ってみた(前編)

Qiitaの記事「TDDによるマイコンのLチカ開発」を、ルネサス製のRXマイコンIDE(e2studio)の組み合わせで、真似してみました。

  1. RXマイコンで、Unityによる単体テスト環境をセットアップする。
  2. シミュレータ環境、ターゲットボード環境の2通りを用意する。
  3. 元の記事にあった、ホスト環境の構築、CMockの導入は省略。 f:id:sonoka_gi:20190629201139p:plain

環境

プロジェクト作成とprintf()での文字出力

e2studio(V7.3.0以降)では、プロジェクトを生成時に「Renesasデバック仮想コンソールを使用する」をチェックすると、IDE内の専用コンソールを標準出力として使えます。※但し、かなりの出力遅延あり。

1. プロジェクト作成


メニュー > ファイル > 新規 > C/C++プロジェクト から作成し、下記を設定。

  • Templete for New C/C++ Project

    • Renesas RX > Renesas CC-RX C/C++ Executable Projectを選択
  • Select toolchain, device&debug settings

    • Device Settingsのターゲット・デバイスは、RX231-100pin>R5F52318AxFPを選択
    • Configrationsの Hardware Debug構成を生成Debug構成を生成 の2つにチェック
      ※それぞれ、ターゲットボード環境、シミュレータ環境に相当
  • コーディングアシストツールの選択

    • スマートコンフィグレータを使用するにチェック
  • 生成する初期化ルーチンの選択

    • Renesasデバック仮想コンソールを使用するをチェック

    f:id:sonoka_gi:20190622235532p:plain

2. ハードウェア初期化コードの生成


スマートコンフィグレータによるコード生成を利用し、クロックとGPIOの初期化コードを生成します。

  • [クロック]タブ

    • メインクロックのチェックを外す(実装されていないので)
    • 高速オンチップオシレータHOCOクロック(54MHz)を選択

    f:id:sonoka_gi:20190623000117p:plain

  • [コンポーネント]タブ

    • コンポーネントの追加ボタンで、ソフトウェアコンポーネントの選択ダイアログを表示。
    • コンポーネント[ポート]を追加

    f:id:sonoka_gi:20190623000137p:plain

  • コンポーネントConfig_PORTを選択。LED出力2点(PD6,7)、SW入力1点(PB1)のGPIOを設定

    f:id:sonoka_gi:20190623000201p:plain

  • 右上にあるコードの生成ボタンを押すと、初期化コードが生成される

3. コード修正


プロジェクトの構成は下記のようになっています。ここでは2か所のコードを修正します。

f:id:sonoka_gi:20190623015542p:plain

  • main関数に、printf() と Unityで使う putchar() の動作確認コードを追加。
#include "r_smc_entry.h"
#include <stdio.h>

void main(void)
{
    printf("Hello World!\n");
    putchar('p');
    while(1);
}
  • Debug構成(シミュレータ環境)に、コンパイルスイッチUSE_SIMULATORを追加し、クロック初期化コードを一部無効にします1
static void clock_source_select (void)
{
    ・・・・
    /* Make sure HOCO is stopped before changing frequency. */
    SYSTEM.HOCOCR.BYTE = 0x01;

    /* Set frequency for the HOCO. */
    SYSTEM.HOCOCR2.BIT.HCFRQ = BSP_CFG_HOCO_FREQUENCY;

    /* HOCO is chosen. Start it operating. */
    SYSTEM.HOCOCR.BYTE = 0x00;
    /* WAIT_LOOP */
#ifndef USE_SIMULATOR
    // シミュレータでは、ここでハードウェアの変化を無限に待ってしまう
    while (SYSTEM.OSCOVFSR.BIT.HCOVF != 1)
    {
        ;   // wait for stabilization
    }
#endif
    ・・・・
}
  • プロジェクトエクスプローラから、プロパティ > C/C++一般 > パスおよびシンボルを選択。
    • 構成:を、Debugに変更
    • #シンボルタブより、コンパイルスイッチUSE_SIMULATORを追加

    f:id:sonoka_gi:20190623014916p:plain

4. ターゲットボード環境でのビルドと動作確認


  • ターゲットボードをPCに接続しておく

  • ビルドする

    • プロジェクトエクスプローラから、ビルド構成 > アクティブにする > HardwareDebug(Debug on hardware)を選択。その後、プロジェクトのビルドを選択。
  • デバック設定とデバックの開始

    • メニュー > 実行 > デバックの構成 より、~ HardwareDebug の構成を選択し、Debuggerタブを開く
    • Debugger hardware をE2 Lite(RX) に設定
    • 電源 > エミュレータから電源を供給する を いいえ に設定
    • デバックのボタンを押下して、デバックを開始する。(再度デバックするときはF11で可)

    f:id:sonoka_gi:20190630185555p:plain

  • ターゲットへの接続・ダウンロードが完了したら、Renesas Debug Virtual Consoleのウィンドウを開く。見当たらない時はメニュー > Renesas Views > デバック > Renesas Debug Virtual Consoleで表示。

    • ウィンドウをドラックして、コンソールと同時に表示したほうが使いやすい感じです。 f:id:sonoka_gi:20190623001423p:plain
      f:id:sonoka_gi:20190623001426p:plain
  • プログラム実行(F8を押下)。コンソールに"Hello World!"と"p"が表示されればOK f:id:sonoka_gi:20190623001405p:plain

5.シミュレータ環境の設定と動作確認


  • ターゲットボードをPCから外しておく

  • ビルドする

    • プロジェクトエクスプローラから、ビルド構成 > アクティブにする > Debug(Debug)を選択。その後、プロジェクトのビルドを選択。
  • デバック設定とデバックの開始

    • メニュー > 実行 > デバックの構成 より、~ Debug の構成を選択。(特に設定項目なし)
    • デバックのボタンを押下して、デバックを開始する。(再度デバックするときはF11で可)

    f:id:sonoka_gi:20190623001043p:plain

  • プログラム実行(F8を押下)。Renesas Debug Virtual Consoleに"Hello World!"と"p"が表示されればOK

    f:id:sonoka_gi:20190623001030p:plain

最後に

e2studioのバージョンアップでRenesas Debug Virtual Consoleが簡単に使えるようになりました。このため、IDE上でのprintf()出力まではスムーズです。次は、Unityを導入して、単体テスト環境を構築します。

参考にした情報

  1. ルネサスのドキュメント

  2. ルネサスのFAQ


  1. シミュレータでは、CPUの周辺ハードウェア動作はサポートされないため、ハードウェアの変化を待つループがあると、無限待ちになります。最初にシミュレータを利用した時、main()関数が呼ばれなくて困りました・・・