ICE (emulator w obwodzie) zastępuje układ docelowy. Działa jak prawdziwy układ w pozostałej części obwodu, ale ma w sobie różnego rodzaju zaczepy, dzięki czemu można zobaczyć, co się dzieje, ustawić punkty przerwania, załadować nowy kod, pobrać ślady itp. Używa ICD (debugger w obwodzie) specjalny sprzęt do debugowania dodany do docelowego układu w tym celu i stara się dać ci zdolność podobną do ICE. Niestety, marketingowcy zaczęli się angażować i próbowali na nowo zdefiniować te długotrwałe warunki, próbując oszukać cię, że ich produkt jest lepszy od następnego. RealIce firmy Microchip jest tego szczególnie skandalicznym przykładem. To prawda, ale jedyną rzeczą, której nie ma, jest LÓD.
Prawdziwy ICE (nie RealIce) jest najlepszym środowiskiem do debugowania w obwodzie. Niestety, te już prawie zniknęły z powodu wysokiego kosztu stworzenia specjalnej wersji wiążącej docelowego układu do użytku w ICE, a fakt, że prędkości stały się tak wysokie, że zdejmowanie czegokolwiek jest problematyczne. Innym problemem jest to, że ICE wymaga, aby układ docelowy znajdował się w gnieździe, lub wymaga specjalnego adaptera zamontowanego zamiast układu docelowego, aby ICE mógł podłączyć się do swoich linii.
Więc dzisiaj utknęliśmy z ICD. Na szczęście robią większość rzeczy, które chciałbyś zrobić z ICE. Mają nawet jedną zaletę polegającą na tym, że kod działa na prawdziwym układzie docelowym, a nie na czymś, co próbuje być jak układ docelowy. Minusem jest to, że wymagają zasobów na chipie, więc nie są całkowicie przezroczyste dla twojego kodu i sprzętu, tak jak ICE. ICD potrzebuje dostępu do linii debugowania, które często mogą mieć wiele ról. Podczas debugowania nie można używać tych szpilek w innych rolach. Ilość obwodów do debugowania wbudowanych w każdą część musi być utrzymana na niewielkim ułamku całości, w przeciwnym razie koszt byłby zbyt wysoki, więc funkcje muszą być zagrożone. Jedną z fajnych funkcji, które byłyby zbyt drogie, aby dodać je do każdego układu, jest prawdziwa możliwość śledzenia, ponieważ wymaga to dużego bufora pamięci RAM.
Każdy problem można ostatecznie rozwiązać za pomocą różnych narzędzi. Nie chodzi o to, czy możesz to rozwiązać, ale o to, ile czasu i ile wysiłku to zajmuje. Kiedy regularnie korzystałem z ICE (Microchip ICE-2000 i ICE-4000), nie korzystałem często z funkcji śledzenia, ale kiedy to robiłem, inne środki byłyby znacznie droższe. Czasami masz błąd, w którym zmienna nagle ma złą wartość. Przechodzisz przez kod i wszystko jest w porządku, a procedura, która manipuluje zmienną, wydaje się robić wszystko dobrze, ale kiedy ją uruchomisz, w końcu wszystko się psuje i okazuje się, że zmienna jest zniszczona. Przyczyną jest inny kod ze złym wskaźnikiem, przepełnieniem bufora, niedopasowaniem stosu lub podobnym. Za pomocą ICE można ustawić punkt przerwania dla zmienianej zmiennej,
Przez większość czasu ICD wystarczy. Zwłaszcza w przypadku dużych układów, kilka pinów przeznaczonych do debugowania nie stanowi większego problemu. Obecnie używam głównie RealIce do debugowania. Jest o wiele bardziej stabilny i mniej łuszczący się niż ICD2. Nauczysz się z tym żyć.