sim_raspike_src_change - ETrobocon/etrobo GitHub Wiki

ETロボコンシミュレータにおける実機とシミュレータの切り分け方

はじめに

シミュレータについては、完全に実機をシミュレーションしたものではありません。それにより以下の差異が生じます。

  • シミュレータと実機とのパラメータや個体差
  • シミュレータと実機とのAPI(ログ出力等)

それぞれでソースを分けることも実装の一つですが、シミュレータと実機をビルド時に切り替えることで、ソースコードを共有することが可能です。
その方法として、以下の方法があります。

  • プリプロセッサを使用し、実機またはシミュレーションのターゲットを切り分ける。

切替方法などについて、実行委員会より提供している、「sample_00」をもとに説明します。  

サンプルプログラムの構成

sample_00の構成】

項番 ファイル名 内容 備考
app.cpp サンプルプログラム 説明対象
app.h サンプルプログラムのヘッダーファイル
app.cfg コンフィグファイル

実装例

差異によるソースコードの切り分けの実装例は以下の通りです。

1.シミュレーターと実機とのパラメータや個体差の切り分け方について

 22 #ifndef MAKE_RASPIKE
 23   const int8_t pwm = 30;
 24 #else
 25   const int8_t pwm = 60;
 26 #endif

解説
シミュレータの場合、RASPIKE環境でのmakeかを判別フラグ(MAKE_RASPIKE)が定義されないため、
22行目にて、条件が成立し23行目の const int8_t pwm = 30; が有効になる。
なお、RasPike-ART環境においては、24~25行目により、const int8_t pwm = 60; が有効になります。


シミュレータ/実機では、ビルドコマンドが異なります。
【ビルド方法】

区分 コマンド
シミュレータ make app=sample00 sim up
実機(RasPike-ART) make img=sample00

2.シミュレータと実機とのAPI(ログ出力等)の切り分け方について

完全な実機のシミュレーションではないため、使用するAPIによって実機との差異がありますが、
printfによるログ出力は共通で使えます。

区分 API 出力先
シミュレーター printf シミュレーションを起動したコンソール上に出力
実機(RaSPike-ART) printf 実機(RaspberryPi)上のコンソールに出力

解説
printfを使用すると実機とシミュレーションで共通のログ出力が可能です。
また、APIの差異については、以下を確認してください。


3.実機(EV3)とシミュレータ(EV3モード)の切り分け方(旧資料)