TOPPERSプロジェクトの「athrill」を用いた評価ボードシミュレータ

今回のコラムでは、当社が加入しているTOPPERSプロジェクトで開発、公開されているマイコンシミュレータ「athrill」の社内での活用事例について紹介します。

AUTOSAR開発体験キットの評価ボード

当社は、実際に手を動かしてAUTOSARを用いた開発が体験できる教材として「AUTOSAR開発体験キット」を開発し、プロダクトとして提供しています。本キットでは、開発したアプリケーションを実行する評価ボードとして、NCES TRAINING BOARDを使用しています。社内でも本キットを人材教育に活用していますが、コロナ禍でリモートワークが増えたことにより、物理的に評価ボードを扱いにくいことが課題になっています。また、新人研修などで同時にたくさんのメンバーが使用する場合には、評価ボードの数が問題になることもあります。
そこで、マイコンシミュレータathrillを用いて、評価ボードをGUIアプリケーションでシミュレートできれば、リモートで接続したPC上でも、評価ボードを用いた作業ができると考えました。 評価ボードの数や故障といった問題も同時に解決できます。


マイコンシミュレータ「athrill」

athrillは、組み込みプログラムを仮想マイコン上で実行できるシミュレータです。TOPPERSプロジェクトで開発され、公開されています。

https://www.toppers.jp/athrill.html

ソースコードは以下のGitHubで管理されています。("athrill"から始まるリポジトリがathrill関連のソースコードです)

https://github.com/toppers

athrillの機能や使い方に関する情報は、Qiitaの記事をはじめ、Web上に詳しく公開されています。

https://qiita.com/kanetugu2018/items/cf3dea16710a3f0737e8

現在のathrillは、ARMv7-A、RH850/G3KH、V850E2Mといったアーキテクチャに対応しています。一方、NCES TRAINING BOARD(GR-SAKURA)に搭載されているマイコンのアーキテクチャはRXv1であり、athrillには対応していません。しかし、AUTOSAR開発体験キットは、AUTOSAR OSとしてTOPPERS/ATK2を使用しており、アプリケーションはすべてATK2上で動作します。基本的に、ATK2上で動作するアプリケーションは、マイコンのアーキテクチャに依存せずに、そのまま使用することができます。ATK2は、H850/G3KH(RH850/F1K)向けにポーティング済みですので、RH850/F1K向けのathrillおよびATK2を用いることで、AUTOSAR開発体験キットに含まれるアプリケーションをそのまま動かすことができます。 

シミュレーションの実現方法

athrillには、タイマやシリアルIOといった一部の周辺回路は組み込まれていますが、すべての周辺回路のシミュレーションができるわけではありません。 しかし、athrillには、マイコン内部のメモリ情報に外部からアクセスできる「MMAP(※)」という機能があります。このMMAP機能を用いることで、バイナリファイル経由で、マイコンのメモリ上にマッピングされたレジスタ値を外部アプリケーションから読み書きできます。実際に、MMAP機能を用いて、外部アプリケーションと連携している事例がWeb上で紹介されています。

https://qiita.com/kanetugu2018/items/a0b08f07f1f6dcca41cd

https://qiita.com/kanetugu2018/items/fee6c76c0981036a1476

今回使用する評価ボード(NCES TRAINING BOARD)は、主にGPIOを用いてLEDやスイッチを制御するので、事例と同様にMMAP機能を用いれば、GUIアプリケーションでシミュレーションすることが可能です。そこで、以下のようなアプリケーションをWPFで開発してみました。

PUSHボタンはButton、LEDはEllipseのように、評価ボード上の各部品を模擬するコントロールに置き換えています。 光量センサー(CdS)については、GUIアプリケーションでは再現できませんので、光量をSliderで調整できるようにしました。

このGUIアプリケーションでは、athrillが使用するバイナリファイルを指定した上で実行します。事前に、バイナリファイル内の各アドレスに、接続された部品のレジスタを定義して、athrill側で動作させるプログラムと一致させておきます。athrillでも起動時のオプション(memory.txt)にて、どのメモリ領域にバイナリファイルが対応するかを指定することで、athrill上で動作するプログラムから対象のメモリ領域へアクセスすると、バイナリファイルへアクセスできるようになります。 例えば、athrill上のプログラムからLED1をONにするためのビットに1を書き込むと、バイナリファイル(port.bin)内の対象ビットが1になります。GUIアプリケーションでは、バイナリファイル内のLED1に対応するビットが1になったらLED1を赤くし、0になったら白くする、という処理を行うことで、マイコンから評価ボードを制御する振る舞いをシミュレーションできるわけです。

今回の例では、athrillと評価ボード(NCES TRAINING BOARD)で対象としているマイコンが異なるので、各部品に対応するレジスタアドレスも異なります。しかし、GUIアプリケーション側はどのアドレスであっても差し支えないため、AUTOSAR開発体験キットのプログラムを修正しなくてすむよう、NCES TRAINING BOARD側のアドレスに合わせて実現しました。

※MMAP機能の詳細については、以下のスライドの25~27ページをご参照ください。
 2019/09/06 SWEST21
  永和システムマネジメント 組込み技術センター 森 崇氏講演資料
「ATHRILL(アスリル)から 箱庭(HAKONIWA)へ」
https://swest.toppers.jp/SWEST21/program/pdfs/s3b_proceeding.pdf#page=25

サンプルプログラム①

 PUSH1押下によりLED4からLED1までを順に点灯し、PUSH2押下により逆順にLEDを消灯するサンプルプログラムです。 PUSH1/PUSH2に対応するビットをathrill側のプログラムが定期的にチェックし、更新されたら各LEDへの点灯/消灯を行うためのビット操作を行います。 GUIアプリケーションでは、各LEDに対応するビットを定期的にチェックし、各LEDの表示を更新します。

サンプルプログラム②

光量センサーの値を読み取り、その値を7SEG LEDに表示するサンプルプログラムです。 Sliderの値は、NCES TRAINING BOARDに搭載された光量センサーに合わせて3000~0の値としています。 光量が一定の値より小さくなる毎にLED4~LED1を点灯する処理やブザー(SOUNDER)による音出力も行います。

サンプル①、②の制御処理は、NCES TRAINING BOARDを制御するためのアプリケーションを1行も修正せずにシミュレーションを実現することができました。

おわりに

今回開発した評価ボードシミュレータにより、AUTOSAR開発体験キットの各アプリケーションを、シミュレータ上で動作できることが確認できました。 あくまでシミュレータのため、マイコン上のタイマによる実時間の再現ができないといった制約はありますが、学習用の環境としては十分です。今後、当社では、リモートワークによる社内研修等に活用していく予定です。

この記事を読んだ人はこちらの記事も読んでいます。
最近流行りの攻撃メール
column
最近、攻撃メールが多くないですか? 筆者のところに、数人から似たようなメールの相談がありました。いずれも攻撃メールです。皆さんにも届いている...