ICE(インサーキットエミュレータ)がターゲットチップを置き換えます。回路の残りの部分に対して実際のチップのように機能しますが、内部にあらゆる種類のフックがあるため、何が起こっているのかを確認したり、ブレークポイントを設定したり、新しいコードをロードしたり、トレースを取得したりできます。ICD(In-Circuit Debugger)はその目的のためにターゲットチップに追加された特別なデバッグハードウェアは、ICEのような機能を提供しようとします。残念ながら、マーケティング担当者は、あなたの製品が次の製品より優れていると思い込ませるために、これらの長年の用語を再定義しようとしました。MicrochipのRealIceは、これの特にひどい例です。それは本当ですが、そうではない一つのことはICEです。
実際のICE(RealIceではない)は、最高のインサーキットデバッグ環境です。残念なことに、ICEで使用するターゲットチップの特別なボンドアウトバージョンを作成するためのコストが高く、速度が非常に高くなったため、チップから何かを取り出すことが問題であるため、これらはほとんどなくなりました。もう1つの問題は、ICEがターゲットチップをソケットに挿入する必要があるか、ICEがそのラインに接続できるようにターゲットチップの代わりに特別なアダプターを取り付ける必要があることです。
それで今日、私たちはICDにこだわっています。幸いなことに、彼らはあなたがICEでやりたいことのほとんどを行います。彼らもになろうとしたコードは、実際のターゲット・チップ上で実行されていること、ではない何かで一つの利点を持っているようにターゲットチップ。欠点は、オンチップリソースが必要なため、ICEのようにコードやハードウェアに対して完全に透過的ではないことです。ICDは、多くの場合複数のロールを持つことができるデバッグラインにアクセスする必要があります。デバッグ中は、これらのピンを他の役割で使用することはできません。各部品に組み込まれているデバッグ回路の量は、全体のわずかな部分に抑える必要があります。そうしないと、コストが高すぎるため、機能を妥協する必要があります。すべてのチップに追加するには高価すぎる機能の1つは、大きなRAMバッファを必要とするため、真のトレース機能です。
すべての問題は、最終的にさまざまなツールで解決できます。それはあなたがそれを解決できるかどうかではなく、どれくらいの時間とどれだけの労力がかかるかです。ICE(Microchip ICE-2000およびICE-4000)を定期的に使用していたときは、トレース機能を頻繁に使用しませんでしたが、他の手段を使用した場合は大幅にコストがかかりました。変数の値が突然間違っているというバグがある場合があります。コードをステップスルーすると、すべてが正常であり、変数を操作するルーチンはすべて正常に機能しているように見えますが、実行すると、最終的に物事が急になり、その変数が破棄されます。原因は、不正なポインタ、バッファオーバーフロー、スタックの不一致などを伴う他のコードです。ICEを使用すると、変更する変数にブレークポイントを設定できます。
ほとんどの場合、ICDは十分に機能します。特に大きなチップでは、デバッグ専用のカップルピンはそれほど問題ではありません。最近では、デバッグにRealIceを主に使用しています。ICD2よりもはるかに安定しており、フレークも少ないです。あなたはそれと共に生きることを学びます。