ICE (In-Circuit Emulator) แทนที่ชิปเป้าหมาย มันทำหน้าที่เหมือนชิปจริงไปยังส่วนที่เหลือของวงจร แต่มีตะขอทุกชนิดอยู่ภายในเพื่อให้คุณสามารถดูว่าเกิดอะไรขึ้นตั้งจุดพักโหลดโค้ดใหม่คว้าร่องรอย ฯลฯ ใช้ ICD (In-Circuit Debugger) ฮาร์ดแวร์ดีบักพิเศษที่เพิ่มไปยังชิปเป้าหมายสำหรับวัตถุประสงค์นั้นและพยายามให้ความสามารถในการคล้ายกับ ICE น่าเสียดายที่นักการตลาดได้รับการยกย่องและพยายามที่จะนิยามคำศัพท์ที่ยืนยาวเหล่านี้ในความพยายามที่จะหลอกลวงคุณในการคิดว่าผลิตภัณฑ์ของพวกเขาดีกว่าครั้งต่อไป RealIce ของ Microchip เป็นตัวอย่างที่น่าเกรงขามในเรื่องนี้ มันเป็นเรื่องจริง แต่สิ่งหนึ่งที่ไม่ใช่ของ ICE
ICE จริง (ไม่ใช่ RealIce) คือสภาพแวดล้อมการดีบักในวงจรที่ดีที่สุด น่าเสียดายที่สิ่งเหล่านี้หายไปมากเนื่องจากค่าใช้จ่ายสูงในการสร้างชิปเป้าหมายรุ่นพิเศษสำหรับใช้ใน ICE และความจริงที่ว่าความเร็วนั้นสูงมากจนการถอดชิปเป็นปัญหา ปัญหาอีกประการหนึ่งคือ ICE ต้องการชิปเป้าหมายอยู่ในซ็อกเก็ตหรือต้องใช้อะแดปเตอร์พิเศษติดตั้งแทนที่ชิปเป้าหมายเพื่อให้ ICE สามารถเชื่อมต่อกับสายของมันได้
ดังนั้นวันนี้เราติดอยู่กับ ICD โชคดีที่พวกเขาทำสิ่งต่าง ๆ ที่คุณต้องการทำกับ ICE พวกเขายังมีข้อได้เปรียบอีกข้อหนึ่งที่รหัสกำลังทำงานอยู่บนชิปเป้าหมายจริงไม่ใช่สิ่งที่พยายามจะเป็นเหมือนชิปเป้าหมาย ข้อเสียคือพวกเขาต้องการทรัพยากรบนชิปจึงไม่โปร่งใสอย่างสมบูรณ์กับรหัสและฮาร์ดแวร์ของคุณเช่นเดียวกับ ICE ICD ต้องการการเข้าถึงบรรทัดการดีบักซึ่งมักจะมีหลายบทบาท คุณไม่สามารถใช้พินเหล่านั้นในบทบาทอื่นขณะทำการดีบั๊ก จำนวนของวงจรการดีบักที่สร้างขึ้นในแต่ละส่วนจะต้องถูกเก็บไว้ที่เศษเสี้ยวของผลรวมอื่น ๆ ที่ค่าใช้จ่ายจะสูงเกินไปดังนั้นคุณลักษณะจึงต้องถูกทำลาย คุณลักษณะที่ดีอย่างหนึ่งที่แพงเกินไปที่จะเพิ่มในชิปทุกตัวคือความสามารถในการติดตามที่แท้จริงเนื่องจากต้องใช้ RAM บัฟเฟอร์ขนาดใหญ่
ในที่สุดทุกปัญหาสามารถแก้ไขได้ด้วยเครื่องมือที่หลากหลาย ไม่ใช่ว่าคุณจะแก้ปัญหาได้ แต่ต้องใช้เวลานานแค่ไหนและต้องใช้ความพยายามเท่าไหร่ เมื่อฉันใช้ ICE เป็นประจำ (Microchip ICE-2000 และ ICE-4000) ฉันไม่ได้ใช้คุณสมบัติการติดตามบ่อย แต่เมื่อฉันทำวิธีการอื่นจะมีค่าใช้จ่ายสูงกว่ามาก บางครั้งคุณมีข้อผิดพลาดที่ตัวแปรก็มีค่าผิดในนั้น คุณก้าวผ่านโค้ดและทุกอย่างเรียบร้อยและรูทีนที่จัดการกับตัวแปรดูเหมือนว่าจะทำทุกอย่างถูกต้อง แต่เมื่อคุณรันมันในที่สุดสิ่งที่อึออกและคุณพบว่าตัวแปรถังขยะ สาเหตุคือรหัสอื่น ๆ ที่มีตัวชี้ที่ไม่ดีบัฟเฟอร์ล้นหน่วยความจำไม่ตรงกันหรือคล้ายกัน ด้วย ICE คุณสามารถตั้งค่าเบรกพอยต์กับตัวแปรที่กำลังเปลี่ยนแปลง
เวลาส่วนใหญ่ ICD จะทำได้ดีพอ โดยเฉพาะอย่างยิ่งกับชิปขนาดใหญ่พินคู่ที่อุทิศให้กับการดีบักนั้นไม่ใช่ปัญหามากนัก ทุกวันนี้ฉันใช้ RealIce เป็นส่วนใหญ่ในการดีบัก มันมีเสถียรภาพมากขึ้นและไม่สม่ำเสมอกว่า ICD2 คุณเรียนรู้ที่จะอยู่กับมัน