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の差異については、以下を確認してください。