15

バックグラウンド:

私はAtmelAVRatmega2560を使用して大規模なプロジェクトを開発しています。このプロジェクトには、多くのハードウェアベースの機能(7つのSPIデバイス、2つのI2C、2つのRS485 MODBUSポート、多くのアナログおよびデジタルI / O)が含まれています。私は、必要なデータにアクセスするためのインターフェイスをメインアプリケーションループに提供する、これらすべてのデバイス用の「ドライバー」を開発しました。

質問:

私が開発しているプロジェクトは、最終的にSIL基準を満たす必要があります。

コードをテストして、適切なレベルのコードカバレッジを提供できるようにしたいと思います。ただし、このようなテストフレームワークをどのように設定するかを開始するための情報を見つけることができません。

アイデアは、将来のバグ修正と機能追加をテストして、コードが壊れているかどうかを確認できる一連の自動テストを行うことができるということです。問題は、コードをチップ上でテストする方法がわからないことです。

デバイスのI/Oを監視し、外部接続されたデバイスをエミュレートするためのハードウェアが必要ですか?提供できるポインタは大歓迎です。

-スティーブ

4

5 に答える 5

3

実際のハードウェアに対して単体テストを実行しないでください。常に I/O インターフェイスをモックしてください。そうしないと、エラー状態をシミュレートできず、さらに重要なことに、テストの成功を信頼できません。

したがって、必要なのは、アプリを個別にテストできるさまざまな部分に分割することです。これらのテストに必要なすべてのハードウェアをシミュレート (またはモック) し、開発用 PC で実行します。

これでコードの大部分がカバーされ、ドライバーが残ります。ハードウェアなしでできるだけ多くのドライバー コードを動作させるようにしてください。あとは、コードをハードウェア上で実行する方法を考え出す必要があります。これは通常、信号などに応答する外部デバイスを備えたテストベッドを作成する必要があることを意味します。これは脆弱であるため (「テストではこれを自動的に機能させることができない」など)、ハードウェアを準備した後にこれらのテストを手動で実行する必要があります。

于 2009-10-15T14:15:10.513 に答える
1

Vectorcastは、コード カバレッジを使用してハードウェア上で単体テストを実行するための商用ツールです。

于 2009-10-15T14:47:06.363 に答える
0

私はタスクを分けるのが好きです。たとえば、Atmel AVR用の循環バッファーを作成したとき、それをすべてCode :: Blocksで記述し、AVR GCCコンパイラーではなく通常のGCCコンパイラーでコンパイルしてから、ユニットテストを作成しました。特別なヘッダーファイルを使用して、使用したい適切なデータ型(uint8_tなど)を提供しました。単体テストでエラーを見つけて修正し、修正したコードをAVRStudioに渡して統合しました。その後、書き込みサポート関数とISRを使用して、バッファーを有用なコードに適合させました(つまり、バッファーから1バイトをポップし、UARTデータ出力レジスタにプッシュし、printf関数のバッファーに文字列定数を追加します)。次に、AVRシミュレーターを使用して、ISRと関数が呼び出されていること、および正しいデータがレジスターに表示されていることを確認しました。

私はAVRStudioと比較してCode::Blocksのデバッグ機能を非常に好むので、可能な限り上記のアプローチを使用します。できないときは、通常、ハードウェアのみを扱っています。たとえば、方形波を自動的に生成するタイマーがあります。私ができる最善のことは、ピンビットがシミュレーターでいじられていることを確認することでした。その後、スコープを接続して確認する必要がありました。

問題をデバッグするときは、マルチレベルのアプローチを使用するのが好きです。たとえば、クロックの場合、最初の層は「クロックピンにプローブを置き、そこに信号があるかどうかを確認します」です。そうでない場合は、uCのピンを調べて、信号を探します。次に、UARTの1つにデバッグインターフェイスをコーディングしました。ここで、特定のレジスタ値を調べて、それらが想定どおりであることを確認できます。したがって、それが機能しない場合、次のステップは「レジスタ値を呼び出して、それが正しいことを確認する」です。

デバッグを計画するときはいつでも、4ステップほど先を考えてみてください。ここには+5Vがあるはずですが、ない場合はどうなりますか?ピンを切り替える方法をデバッグインターフェイスに書き込み、それによってピンが変更されるかどうかを確認します。それがうまくいかない場合はどうなりますか?他のことをするなどなど。「この危険なものが機能しない理由はありません!!!!」に遭遇するポイントに到達します。しかし、うまくいけば、事前に理由を理解するでしょう。

于 2009-10-19T19:27:21.310 に答える
0

JTAGコネクタはありますか?JTAG を使用して、チップのエラー状態をシミュレートできる場合があります。

于 2009-10-16T15:37:09.493 に答える