ハードウェアチームが一部のハードウェアを開発するのに2か月かかることを考慮してください。
私の質問は、どのようにしてソフトウェアを作成し、ハードウェアなしでテストできるかということです。
従うべき規格はありますか?どうやってやるの?
exit()
/ dev / mem内のハードコードされたアドレスをmmapしようとしたためにそうなることがわかりました。
ハードウェアチームが一部のハードウェアを開発するのに2か月かかることを考慮してください。
私の質問は、どのようにしてソフトウェアを作成し、ハードウェアなしでテストできるかということです。
従うべき規格はありますか?どうやってやるの?
exit()
/ dev / mem内のハードコードされたアドレスをmmapしようとしたためにそうなることがわかりました。
回答:
ファームウェア開発の初期段階でハードウェアがないことが起こります。これに対処するための一般的な戦略は次のとおりです。
これは、モジュール設計が再び役立つ場所です。低レベルのハードウェアの相互作用を合理的にシミュレートできない場合は、そのハードウェアに接触するが、独自のシミュレートされたアクションを上位レベルに渡す別のバージョンのモジュールを使用します。上のレベルはこれが起こっていることを知りません。このように低レベルモジュールをチェックするのではなく、他のほとんどすべてをチェックします。
手短に言えば、当然のことながら、ソフトウェアの適切な設計手法を使用します。
開発しているものや、最終的にハードウェアのベースとなるマイクロコントローラーのファミリーに対する洞察がない場合、マイクロコントローラーのほとんどのファミリーには、低コストの開発システムがあり、共通のペリフェラルのスイートを備えているため、次のことが可能になります。最終的なターゲットハードウェアの少なくとも一部をシミュレートします。
アプリケーションがどのようにハードウェアに依存するかに応じて、標準のPC(Windows、Linux ...)でプロジェクトの実装を開始できます。ほとんどのペリフェラルアクセスはとにかく抽象化する必要があるため、後で置き換えられるダミー関数を実装することは大したことではありません。動作をシミュレートできない場合は、少なくともシステムのモックアップ(API ...)を実行できます。そのため、ハードウェアの準備が整い次第、実際の実装ははるかに高速で明確になります。
もちろん、リアルタイムの動作や複雑なハードウェアドライバーなど、シミュレーションできないものはたくさんあります。一方、割り込み駆動型ADCは、ファイルまたはネットワークポートから値を読み取るスレッドを使用して簡単にシミュレーションできます。
もちろん、これはすべてさまざまな要因に大きく依存します。
私は、まずPC上のほとんどすべてのファームウェアモジュールを設計しています。
チップ用のシミュレーターを入手してください。予想されるすべての入力といくつかの予期しない入力もシミュレーションする必要があります。できる限りモジュール化/抽象化し、単体テストを記述します。可能であれば、これらのテストは実際のコードの一部になり、機能(ボードのセルフテスト)に変わります。
シミュレーターを入手できない場合は、HAL(ハードウェアアブストラクションレイヤー)を使用してできる限り抽象化してください。すべてのドライバーがその背後にいます。いくつかのC関数呼び出しの背後にあるすべてのプラットフォーム固有のアセンブリを抽象化し、それらもドライバーと考えてください。残りを移植可能なC / C ++コードとして記述し、x86用のシンHALを作成し、すべてのテストケースでマシン上で実行します。
そうすれば、ハードウェアを入手したときに、HALをデバッグするだけで済みます。薄いほど、デバッグが速く、すべてが機能します。あなたがより速くOPSのための組立プラットフォーム固有を使用する場合は、ことを忘れないでくださいあなたは非常によろしいですかビットの正確なテストを取得します。
a == b
、浮動小数点数との比較を使用する際に予防策を講じることを学びましたが、それでも固定小数点数でそれらを無意識に使用します。
あなたの質問は少し広いです。ハードウェア(HW)は、完全なカスタムASIC / FPGA開発、アセンブラープログラムされたDSP、または既製のマイクロプロセッサー/マイクロコントローラー/ SoCなどに基づく典型的な組み込みシステムのみを意味します(もちろん、SoCにはDSPも含まれる場合があります)あなたがプログラムしたいかもしれないこと....)。大量販売の場合、それをASICにすることは珍しくありません。
しかし、2か月のプロジェクトの場合、いくつかのマイクロコントローラーに基づいていると思います。
いずれにせよ、ハードウェアチームにプロトタイプを提供するようにストレスを与える必要があります。絶対期限までにコードのテストを開始できるプロトタイプを提供する必要があります。これは、一部の人々がすでに述べたように、一般的な開発ボードで構成されている可能性がありますが、私の意見ではあなたに適切なものを提供する仕事、そして潜在的にはテストに必要な/類似の周辺機器も提供します。
シミュレータもある程度は可能ですが、取得する可能性のある実際のセンサーやデータを特性評価する必要がある場合もあります。ここでは、ハードウェアチームも少なくともあなたを支援する必要があります。
それ以外は、ソフトウェア設計は既に完了しており、すべての高レベルモジュールは、実際のハードウェアなしで実装およびユニットテストを実行できます(実行する必要があります)。理想的には、ハードウェアチームと一緒にAPIも定義し、それらが最低レベルの機能を提供するため、そこでハードウェア側で行う変更(たとえば、単に使用するポートピンを再定義する)が常に行われるとは限りませんあなたにとって重要です。
すべての場合において、コミュニケーションが重要です。
はい、ボードが製造される前に、ターゲットボード用のコードを開発できます。
どうやって ?
まず、そのシステムの主な目的を知る必要があります。したがって、これからコントローラーはdigikey、mouserのような広大な可用性ソースから適切に選択できます。
そして、プロテウスのようなシミュレータを選択してください。これで正確なプロセッサー/コントローラーがシミュレートされ、コーディングを開始できます。しかし、ハードウェアの場合のように正確さを期待することはできません。