HOME > ソフテックだより > 第243号(2015年10月7日発行) 技術レポート「組み込みソフトウェア開発におけるPCシミュレーションの活用」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第243号(2015年10月7日発行)
技術レポート

「組み込みソフトウェア開発におけるPCシミュレーションの活用」

1. はじめに

私はソフテックに入社して約20年経ちます。主に組み込みソフトウェア開発に携わっています。
組み込みソフトウェアは、ターゲットシステム専用に開発された基板上で動作する特定システム専用のソフトウェアです。そのため、組み込みソフトウェアを開発するには専用の基板が必要となりますが、基板が完成していなければデバッグをすることができず、効率良く開発を進められないこともあります。

弊社では必要に応じて組み込みソフトウェアのシミュレーションを行うための専用のパソコンソフトウェア(PCシミュレーション)を作成することがあります。今回は組み込みソフトウェア開発におけるPCシミュレーションについて紹介したいと思います。

2. PCシミュレーションについて

ソフトウェアは一般的に「アプリケーション部」、「ドライバ部」、「ハードウェア部」の階層に分かれています。ソフトウェア部分はアプリケーション部とドライバ部になりますが、アプリケーション部はソフトウェアの機能を実現するためのソフトウェアであり、ドライバ部はハードウェアを制御するためのソフトウェアです。

弊社で開発するPCシミュレーションはアプリケーション部をデバッグすることを目的としています。 アプリケーション部のプログラムは組み込みソフトウェアとPCシミュレーションソフトウェアそれぞれで共通で使用できるようにプログラミングします。
ハードウェアを制御するドライバ部のプログラムは異なりますが、アプリケーション部とドライバ部のインターフェース(以下、I/F)をあわせることで、ドライバ部以下を切り替えてアプリケーション部を変えることなくPCシミュレーションソフトウェアと組み込みソフトウェアの両方を動作させることができます。

下記図1にソフトウェア構成のイメージ図を示します。

ソフトウェア構成のイメージ図です
図1. ソフトウェア構成のイメージ図

3. PCシミュレーション例

次にPCシミュレーション例について説明します。
下記図2基板の@〜E部分の機能をWindowsソフトウェアでPCシミュレーションする前提で説明します。

Sunhayato製 R8C/TinyマイコンSR8C15CP用書込み・I/OボードMB-RS8です
図2. Sunhayato製 R8C/TinyマイコンSR8C15CP用書込み・I/OボードMB-RS8

@〜E部分の機能とPCシミュレーション内容について表 1に示します。
表1の@〜E内容が、図 3に示したPCシミュレーションソフトのサンプル画面中の@〜Eに該当します。

No. 機能 PCシミュレーション内容
@ シリアル通信 パソコンのCOMポート番号を入力し、通信開始することでパソコンのシリアルポート(内蔵COMポートやUSBシリアルケーブル)を利用して相手機器と通信を行います。
A LCD出力 LCD表示内容をテキストボックスに文字表示を行います。
B LED出力 LEDの点灯状態を表示します。
C SW入力 ボタンを配置し、ボタン入力を行います。
D ブザー出力 ブザーの出力状態をON/OFFでテキスト表示します。
E 可変抵抗器(ボリューム)による電圧値入力 アナログ-デジタル変換値をテキストボックスに入力します。

表1. 機能とPCシミュレーション内容

PCシミュレーションソフトウェアのサンプル画面です
図3. PCシミュレーションソフトウェアのサンプル画面

このように基板の入出力の確認をWindowsソフトウェア上で確認できるようにします。
アプリケーション部のプログラムは共通化して作成しているため、組み込みソフトウェアとPCシミュレーションでほぼ同じ動作結果を確認することができます。

4. PCシミュレーションのメリット・デメリット

次にPCシミュレーションのメリット・デメリットについて説明したいと思います。

4.1 メリット

4.1.1 基板完成前にアプリケーション部の完成度を高めることができる

ソフトウェアのコーディングが完了しても基板が完成していなければデバッグを進めることができません。
PCシミュレーションを使用することで、パソコンソフトウェアのデバッガ上(WindowsのMicrosoft Visual Studioなど)でデバッグを進めることができ、基板完成前にアプリケーション部の完成度を高めることができます。
また、複数の基板構成からなるシステムの場合、基板間のやりとりを通信(Ethernet通信やRS-232C通信)で行うことがありますが、PCシミュレーション上のパソコンのシリアルポート(内蔵COMポートやUSBシリアルケーブル)やEthernetポートを使用して接続相手と通信の確認も行うことができます。

4.1.2 場所をとらない

組み込みソフトウェア開発では、基板の他にも電源や入出力を確認するための治具なども必要となり、それらを配置する場所を確保する必要があります。また、複数の環境を用意する場合はその分の場所を必要とします。
PCシミュレーションはパソコン上で動きますのでパソコンの場所が確保できれば確認が可能です。

4.1.3 開発環境の不足に対応できる

人数が多く入る開発ではハードウェアが不足することがあります。PCシミュレーションはパソコンがあればデバッグが可能ですので、開発環境の不足を補うことが可能です。
また、複数の基板構成からなるシステムの場合は最大構成でのテストが必要になります。開発費用や場所にもよりますが、例えば数十枚以上の基板構成からなる実機環境の場合は1〜2セット用意するのが限度です。
PCシミュレーションであればパソコン1台で最大構成の環境を用意することも可能であり、複数の人が最大構成で確認することができます。

4.1.4 PCシミュレーション環境を早く立ち上げられる

開発が終了すると基板環境は倉庫にしまったり顧客に返却したりします。
現場でトラブルなどが発生し、顧客からソフトウェアを調査してほしいと依頼があった場合に、基板環境の立ち上げに時間がかかることがあります。
PCシミュレーション環境であれば自分のパソコンで立ち上げることができるため、基板環境に比べて早く環境を立ち上げることが可能です。調査できる対象はアプリケーション部に限定されますが、問題の切り分けを行うことでその後の対応をスムーズに進めることができます。

4.2 デメリット

4.2.1 ドライバやCPU設定まわりのシミュレーションはできない

PCシミュレーションはアプリケーション部をデバッグすることを目的としているため、PCシミュレーションでドライバやCPU設定などのハードウェアまわりのデバッグを行うことはできません。
最近では統合開発環境にシミュレータ機能が付属されており、疑似的にCPU設定の確認ができるものがあります。
アプリケーション部のデバッグはPCシミュレーションを使い、ドライブ部のデバッグは統合環境のシミュレータ機能を使うとういうように、デバッグ箇所によって使い分けるのが良いと考えます。

4.2.2 リソース条件が異なる

組み込みソフトウェアは基板上で動作しますが、PCシミュレーションソフトはパソコン上で動作するためROM/RAM/CPU(処理速度)などのリソース条件が異なります。
そのため、リソース条件の違いをしっかり考慮していないとPCシミュレーション上では動くが基板上では動かない(またはその逆)ということが発生します。
PCシミュレーション上で確認した後に、基板上での確認は必須となります。

4.2.3 PCシミュレーションの作成時間が必要

PCシミュレーションを作成しない場合に比べてPCシミュレーションの作成時間が必要となります。しかし、メリットにあげたような内容もありますのでトータルでみれば開発時間が短くなることもあります。
弊社では組み込みソフトウェアのプラットフォーム開発(*1)を行っており、その中にはPCシミュレーションも含まれています。プラットフォームを利用することでPCシミュレーション開発時間を短縮することができます。

5. おわりに

今までにいくつかの開発でPCシミュレーションに対応してきました。過去に100枚以上の基板構成からなるシステムの開発を行ったことがありますが、この時は常時3〜4人がPCシミュレーション上で最大構成の確認を行うことができ、最大構成で発生する問題点を確認することができました。
PCシミュレーション対応により、納期を遵守し、品質の良いソフトを作ることにつなげられていると感じます。
デメリットにあげた内容もありますが、きちんと把握できていれば問題となる内容ではありません。デメリット部分をきちんと把握して使用することで、有効に活用することができる仕組みだと考えます。

(M. A.)

[注釈]
※1
製品を個別に開発していくのではなく、土台となる共通部分をあらかじめ開発しておき、その共通部分の上に個々の製品を開発していく開発手法のこと。

関連ページへのリンク

関連するソフテックだより

ページTOPへ