ハードウェアなしの組み込みソフトウェアの作成


8

ハードウェアチームが一部のハードウェアを開発するのに2か月かかることを考慮してください。

私の質問は、どのようにしてソフトウェアを作成し、ハードウェアなしでテストできるかということです。

従うべき規格はありますか?どうやってやるの?


ハードウェアがどれだけ複雑になるかに応じて、シミュレータを試すことができます。それが単純な周辺機器を備えたマイクロコントローラのみであれば、それはかなり可能です。それ以上で、あなたはそのルートで運がありません。
2016

6
使用しているマイクロおよびその他の周辺機器用の開発ボードを見つけて、ハードウェアチームの設計に最もよく似た方法でそれらをすべて接続してみてください。大きくて見苦しいでしょうが、実際のシステムに十分近いシステムを構築できるはずです。少なくともファームウェアが
認識

最悪の場合、ハードウェアを適切にシミュレートできない場合は、ハードウェアを無効にする方法を用意してください。ほんの数週間前、私は別のプログラムとのネットワーク通信をテストしたかったのですが、それがexit()/ dev / mem内のハードコードされたアドレスをmmapしようとしたためにそうなることがわかりました。
isanae 2016

1
多くの場合、組み込みソフトウェアの開発にはシミュレータを使用する方が実際に望ましいです。デバッグがはるかに簡単です。もちろん問題は、まともなシミュレーターが必要なことです。適応できる一般的なものがある場合もあれば、賢いインターンがカフェインを利用したコーディング狂乱でそれを作成できる場合もあります。
ホットリックス2016

回答:


34

ファームウェア開発の初期段階でハードウェアがないことが起こります。これに対処するための一般的な戦略は次のとおりです。

  1. コードを書く前に、システムを慎重に設計する前に時間をかけてください。もちろん、とにかくこれを行う必要がありますが、この場合は通常よりもさらに重要です。パスタベースの混乱よりも、よく考え抜かれたソフトウェアをデバッグする方がはるかに簡単です。

  2. すべてを適切にモジュール化し、モジュール間のインターフェースを最小限に抑えます。これにより、個々のモジュールのバグを封じ込め、個々のモジュールのテストを容易にすることができます。

  3. コードをボトムアップで記述し、ハードウェアに触れるドライバーを最初に、高レベルのアプリケーションロジックを最後に書きます。これにより、アーキテクチャによって課せられる不便を早期に発見できます。ハードウェアの現実が明らかになったときに、アーキテクチャを変更することを恐れないでください。ただし、すべてのドキュメントがそれに応じて更新されていることを確認してください。

  4. シミュレートします。ほとんどのマイクロコントローラ企業は、マイクロコントローラのソフトウェアシミュレータを提供しています。これらはこれまでしか機能しませんが、それでも非常に便利です。ハードウェアの入力のシミュレーションと出力の測定は難しいかもしれませんが、この方法でより高いレベルのロジックをチェックすることはそれほど難しくありません。

    これは、モジュール設計が再び役立つ場所です。低レベルのハードウェアの相互作用を合理的にシミュレートできない場合は、そのハードウェアに接触するが、独自のシミュレートされたアクションを上位レベルに渡す別のバージョンのモジュールを使用します。上のレベルはこれが起こっていることを知りません。このように低レベルモジュールをチェックするのではなく、他のほとんどすべてをチェックします。

手短に言えば、当然のことながら、ソフトウェアの適切な設計手法を使用します。


追加したい:ASAPで開発ボード(はい、複数、おそらく少なくとも1つは殺すので...)を取得し、低レベルのドライバーを配置します。できるだけ多くのコードを単体テストします。はい、ハードウェアに触れるコードを統合できます。いいえ、ハードウェアを完全にシミュレートすることはできませんが、初めてフラッシュする前でも、機能の90%を正しく得ることができます。私は最近のプロジェクトで上記のすべてを行いましたが、実際のハードウェアが導入されたときに99%の機能があり、機能していました。それは素晴らしいことでした。
CHendrix 2016

13

開発しているものや、最終的にハードウェアのベースとなるマイクロコントローラーのファミリーに対する洞察がない場合、マイクロコントローラーのほとんどのファミリーには、低コストの開発システムがあり、共通のペリフェラルのスイートを備えているため、次のことが可能になります。最終的なターゲットハードウェアの少なくとも一部をシミュレートします。


1
同意した。もっと強く言いたい。ハードウェアと同時にソフトウェアを終了する必要があるこのような状況では、適切な開発または評価ボードを備えたマイクロコントローラーのみを使用します。
スティーブG

OPが何を開発しているかについて洞察を得ていたとしても、ほとんどのマイクロコントローラーファミリはまだ利用可能なシミュレーターを持っています。
Olin Lathrop

私は両方の方法を使用します。しかし、私はさらに、必要な生産ラインのテスト機器にも目を光らせています。生産エンジニアと協力してハードウェアを設計し、ドライバーをテストして、生産テストの一部を形成できます。運が良ければ、開発ボード/プロトタイプ用のハードウェアを構築して、プロセスを先導することもできます。すべては、どのように助けを求める要求を
スプーン

PCBで試す前に、まずコア機能をプログラムする開発ボードがあるので、これがこの質問に対する最良の答えです。
lucas92 2016

2

アプリケーションがどのようにハードウェアに依存するかに応じて、標準のPC(Windows、Linux ...)でプロジェクトの実装を開始できます。ほとんどのペリフェラルアクセスはとにかく抽象化する必要があるため、後で置き換えられるダミー関数を実装することは大したことではありません。動作をシミュレートできない場合は、少なくともシステムのモックアップ(API ...)を実行できます。そのため、ハードウェアの準備が整い次第、実際の実装ははるかに高速で明確になります。

もちろん、リアルタイムの動作や複雑なハードウェアドライバーなど、シミュレーションできないものはたくさんあります。一方、割り込み駆動型ADCは、ファイルまたはネットワークポートから値を読み取るスレッドを使用して簡単にシミュレーションできます。

もちろん、これはすべてさまざまな要因に大きく依存します。

  • コントローラーとPC(gccなど)で同じ/類似のツールチェーンを使用できますか?
  • システムはハードウェアにどのように依存していますか?
  • PCプログラミングの経験はありますか?

私は、まずPC上のほとんどすべてのファームウェアモジュールを設計しています。


こっちも一緒。コンパイラ(組み込み、特別なキーワード、クローズドソースOSおよびネットワークスタックはBSDと完全に互換性がありません)とバグ(C ++を使用)の違いにより、ファイル固有の事前組み込みファイルとプリプロセッサが頻繁に使用されますが、コード自体はDSP間でほぼ同じです。とPC。PCバージョンの場合、強力で重いランタイムエラーチェック(CodeGuard)を使用でき、そのデバッグ機能は組み込みプラットフォームでは対応できません。追加のボーナスは、任意のネットワークと負荷テスト用に追加の仮想デバイスをほとんど使用できないことです。
TMSZ 2016

ラズベリーPiとBeagleBoneの可用性を使用すると、開発環境が同じように簡単にあなたのランタイム環境かもしれない-ツールチェーンで問題なく、などプラス、あなたはvalgrindの/ helgrindなどGDB、使用することができます
jhfrontz

1

チップ用のシミュレーターを入手してください。予想されるすべての入力といくつかの予期しない入力もシミュレーションする必要があります。できる限りモジュール化/抽象化し、単体テストを記述します。可能であれば、これらのテストは実際のコードの一部になり、機能(ボードのセルフテスト)に変わります。

シミュレーターを入手できない場合は、HAL(ハードウェアアブストラクションレイヤー)を使用してできる限り抽象化してください。すべてのドライバーがその背後にいます。いくつかのC関数呼び出しの背後にあるすべてのプラットフォーム固有のアセンブリを抽象化し、それらもドライバーと考えてください。残りを移植可能なC / C ++コードとして記述し、x86用のシンHALを作成し、すべてのテストケースでマシン上で実行します。

そうすれば、ハードウェアを入手したときに、HALをデバッグするだけで済みます。薄いほど、デバッグが速く、すべてが機能します。あなたがより速くOPSのための組立プラットフォーム固有を使用する場合は、ことを忘れないでくださいあなたは非常によろしいですかビットの正確なテストを取得します


固定小数点DSPを使用する場合、ビットの正確さは特に重要です。
RonanPaixão2016

特定のケースに当てはまる場合と当てはまらない場合がありますが、一般にビット精度には代償があります。QEMUは最近(2年前)、ビット厳密なFPUを実装することを決定し、パフォーマンスはどうなったと思いますか?
Dmitry Grigoryev 2016

FPUを使用する場合ビットの正確さはそれほど重要ではありません。ただし、固定小数点を使用する場合は非常に重要です。特に、ソフトウェアの固定小数点では、どこでも追加のチェックが必要になるためです。
RonanPaixão2016

これは不適切なコーディング慣行の結果です。人々はa == b、浮動小数点数との比較を使用する際に予防策を講じることを学びましたが、それでも固定小数点数でそれらを無意識に使用します。
Dmitry Grigoryev

貧弱なコーディング慣行はかなり問題ですが、他の多くの問題があり、特にエッジケースがそうです。オーバーフローは、精度の低下丸め飽和幅とビットシフトと同様に、すぐに頭に浮かびます。以上のことから、一般的なテストケースでの精度の低下を無視するのは簡単です。問題は、アプリのケースが少なくなり、エラーが小数ビットから整数ビットに移動することです。これは、範囲が誤って計算された場合に発生します。MATLABのFixed-Point Designerの機能ページをチェックして、他に何が問題になっているのかを確認してください。
RonanPaixão2016

1

あなたの質問は少し広いです。ハードウェア(HW)は、完全なカスタムASIC / FPGA開発、アセンブラープログラムされたDSP、または既製のマイクロプロセッサー/マイクロコントローラー/ SoCなどに基づく典型的な組み込みシステムのみを意味します(もちろん、SoCにはDSPも含まれる場合があります)あなたがプログラムしたいかもしれないこと....)。大量販売の場合、それをASICにすることは珍しくありません。

しかし、2か月のプロジェクトの場合、いくつかのマイクロコントローラーに基づいていると思います。

いずれにせよ、ハードウェアチームにプロトタイプを提供するようにストレスを与える必要があります。絶対期限までにコードのテストを開始できるプロトタイプを提供する必要があります。これは、一部の人々がすでに述べたように、一般的な開発ボードで構成されている可能性がありますが、私の意見ではあなたに適切なものを提供する仕事、そして潜在的にはテストに必要な/類似の周辺機器も提供します。

シミュレータもある程度は可能ですが、取得する可能性のある実際のセンサーやデータを特性評価する必要がある場合もあります。ここでは、ハードウェアチームも少なくともあなたを支援する必要があります。

それ以外は、ソフトウェア設計は既に完了しており、すべての高レベルモジュールは、実際のハードウェアなしで実装およびユニットテストを実行できます(実行する必要があります)。理想的には、ハードウェアチームと一緒にAPIも定義し、それらが最低レベルの機能を提供するため、そこでハードウェア側で行う変更(たとえば、単に使用するポートピンを再定義する)が常に行われるとは限りませんあなたにとって重要です。

すべての場合において、コミュニケーションが重要です。


0

はい、ボードが製造される前に、ターゲットボード用のコードを開発できます。

どうやって ?

まず、そのシステムの主な目的を知る必要があります。したがって、これからコントローラーはdigikey、mouserのような広大な可用性ソースから適切に選択できます。

そして、プロテウスのようなシミュレータを選択してください。これで正確なプロセッサー/コントローラーがシミュレートされ、コーディングを開始できます。しかし、ハードウェアの場合のように正確さを期待することはできません。


なぜ反対票を投じるのですか?この回答の何が問題なのか知っていますか?
Photon001、2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.