Một ICE (Trình mô phỏng trong mạch) thay thế chip mục tiêu. Nó hoạt động giống như con chip thực sự với phần còn lại của mạch, nhưng có tất cả các loại móc bên trong để bạn có thể thấy những gì đang xảy ra, đặt điểm ngắt, tải mã mới, lấy dấu vết, v.v. phần cứng gỡ lỗi đặc biệt được thêm vào chip mục tiêu cho mục đích đó và cố gắng cung cấp cho bạn khả năng giống như ICE. Thật không may, những người tiếp thị đã nhận ra và cố gắng xác định lại các thuật ngữ lâu đời này trong nỗ lực của họ để đánh lừa bạn nghĩ rằng sản phẩm của họ tốt hơn sản phẩm tiếp theo. RealIce của Microchip là một ví dụ đặc biệt nghiêm trọng về điều này. Đó là sự thật, nhưng một điều không phải là ICE.
Một ICE thực (không phải RealIce) là môi trường gỡ lỗi trong mạch tốt nhất. Thật không may, những thứ này đã biến mất khá nhiều vì chi phí cao để tạo ra một phiên bản liên kết đặc biệt của chip mục tiêu để sử dụng trong ICE, và thực tế là tốc độ đã tăng cao đến nỗi việc lấy đi mọi thứ từ chip là vấn đề. Một vấn đề khác là ICE yêu cầu chip mục tiêu phải ở trong ổ cắm hoặc yêu cầu bộ chuyển đổi đặc biệt được gắn thay cho chip mục tiêu để ICE có thể kết nối với các dòng của nó.
Vì vậy, ngày nay chúng ta bị mắc kẹt với các ICD. May mắn thay, họ làm hầu hết những điều bạn muốn làm với ICE. Họ thậm chí còn có một lợi thế là mã đang chạy trên chip mục tiêu thực sự, chứ không phải thứ gì đó cố gắng giống như chip mục tiêu. Nhược điểm là chúng yêu cầu tài nguyên trên chip nên không hoàn toàn minh bạch đối với mã và phần cứng của bạn giống như ICE. ICD cần truy cập vào các dòng gỡ lỗi, thường có thể có nhiều vai trò. Bạn không thể sử dụng các chân đó trong các vai trò khác trong khi gỡ lỗi. Số lượng mạch gỡ lỗi được tích hợp trong mỗi phần phải được giữ ở một phần nhỏ trong tổng số khác, chi phí sẽ quá cao, do đó các tính năng phải bị xâm phạm. Một tính năng hay mà quá đắt để thêm vào mỗi chip là khả năng theo dõi thực sự, vì điều đó đòi hỏi bộ đệm RAM lớn.
Mọi vấn đề cuối cùng có thể được giải quyết với một loạt các công cụ. Không phải là bạn có thể giải quyết nó hay không, mà là mất bao lâu và mất bao nhiêu công sức. Khi tôi thường xuyên sử dụng ICE (Microchip ICE-2000 và ICE-4000), tôi đã không sử dụng tính năng theo dõi thường xuyên, nhưng khi tôi làm các phương tiện khác sẽ tốn kém hơn đáng kể. Đôi khi bạn có một lỗi trong đó một biến đột nhiên có giá trị sai trong đó. Bạn bước qua mã và mọi thứ đều ổn và thói quen điều khiển biến dường như làm mọi thứ đúng, nhưng khi bạn chạy nó cuối cùng mọi thứ sẽ biến mất và bạn thấy biến đó bị hỏng. Nguyên nhân là một số mã khác có con trỏ xấu, tràn bộ đệm, không khớp ngăn xếp hoặc tương tự. Với ICE, bạn có thể đặt điểm dừng cho biến được thay đổi,
Hầu hết thời gian, một ICD sẽ làm đủ tốt. Đặc biệt với các chip lớn, cặp chân dành riêng để gỡ lỗi không phải là vấn đề lớn. Ngày nay tôi chủ yếu sử dụng RealIce để gỡ lỗi. Nó ổn định hơn và ít rung hơn so với ICD2. Bạn học cách sống với nó.