Какова функциональная разница между внутрисхемным отладчиком и встроенным эмулятором?

Внутрисхемные эмуляторы (сокращенно ICE) хвастаются своими замечательными функциями отладки, а также имеют высокие ценовые метки.

Внутрисхемные отладчики (сокращенно ICD) могут выполнять большую часть информации, которую может сделать ICE, но часто стоят намного меньше.

Я знаю, что в тот же день ICE действительно удалили бы микросхему проблемы из сокета и заменили бы ее кабелем эмулятора, но с современными QFN, BGA и хрупкими пакетами TQFP кажется, что большинство продуктов, называющих себя " ICE "подключаются к заголовку отладки во многом так же, как и ICD.

Вот несколько примеров продуктов, которые используют «ICE» в названии:

Есть также продукты JTAG «ICE» от нескольких поставщиков. Обратите внимание, что я не обесцениваю их, потому что они не являются физически замкнутыми, но я бы обесценивал их, если они не функционируют как истинный ICE.

В каких задачах разработки мне нужен ICE, и когда мне следует довольствоваться ICD? Предположим, что я хочу выполнить мой код и не использовать индикаторы LED и printf ().

Какие примеры проблем, которые вы решили с помощью ICE, но не могли (реалистично) решить без него?

10 голосов | спросил Kevin Vermeer 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 23 Sep 2011 22:09:52 +0400 2011, 22:09:52

1 ответ


16

ICE (эмулятор In-Circuit) заменяет целевой чип. Он действует как настоящий чип для остальной части схемы, но внутри него есть всевозможные крючки, чтобы вы могли видеть, что происходит, устанавливать точки останова, загружать новый код, отслеживать трассировку и т. Д. ICD (In-Circuit Debugger) использует для этой цели добавляется специальное отладочное оборудование, предназначенное для этой цели, и пытается предоставить вам возможности, подобные ICE. К сожалению, люди, занимающиеся маркетингом, заняли свое место и попытались пересмотреть эти длительные сроки в своей попытке обмануть вас, думая, что их продукт лучше, чем следующий. RealIce от Microchip является особенно вопиющим примером этого. Это реально, но одно, что это не ICE.

Настоящий ICE (а не RealIce) - лучшая внутрисхемная среда отладки. К сожалению, они в значительной степени ушли из-за высокой стоимости создания специальной версии брандмауэра целевого чипа для использования в ICE и того факта, что скорости стали настолько высокими, что от чего-то ничего не получается. Другая проблема заключается в том, что ICE требует, чтобы целевая чипа находилась в сокете, или требуется специальный адаптер, установленный вместо целевого чипа, чтобы ICE мог подключаться к его линиям.

Итак, сегодня мы застряли в ICD. К счастью, они делают большинство вещей, которые вы хотели бы сделать с ICE. У них даже есть одно преимущество в том, что код работает на реальном целевом чипе, а не на чем-то, пытающемся быть как целевой чип. Недостатком является то, что они требуют встроенных ресурсов, поэтому они не полностью прозрачны для вашего кода и оборудования, как ICE. ICD нуждается в доступе к линиям отладки, которые часто могут иметь несколько ролей. Вы не можете использовать эти контакты в других ролях во время отладки. Количество схем отладки, встроенных в каждую часть, должно храниться в малой части общего количества, иначе стоимость будет слишком высокой, поэтому функции должны быть скомпрометированы. Одна приятная функция, которая будет слишком дорогой для добавления на каждый чип, - это истинная возможность трассировки, поскольку для этого требуется большой буфер ОЗУ.

Каждая проблема может быть решена в конечном итоге с помощью различных инструментов. Это не вы можете решить, но сколько времени и сколько усилий требуется. Когда я регулярно пользовался ICE (Microchip ICE-2000 и ICE-4000), я часто не использовал функцию трассировки, но когда я делал другие средства, это было бы значительно более дорогостоящим. Иногда у вас есть ошибка, в которой переменная внезапно имеет неправильное значение. Вы переходите через код, и все в порядке, и процедура, которая манипулирует переменной, кажется, делает все правильно, но когда вы запускаете ее, в конце концов все дерьмо и вы обнаружите, что переменная trashed. Причиной является некоторый другой код с плохим указателем, переполнением буфера, несоответствием стека и т. П. С помощью ICE вы можете установить точку останова на изменяемой переменной, затем посмотреть назад в буфере трассировки, чтобы увидеть, как код попал туда и как все перепуталось.

В большинстве случаев ICD будет достаточно хорошо. Особенно с большими микросхемами, пара контактов, предназначенных для отладки, не является большой проблемой. В настоящее время я использую RealIce для отладки. Это намного более стабильный и менее шелушащийся, чем ICD2. Вы учитесь жить с ним.

ответил Olin Lathrop 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 23 Sep 2011 22:28:11 +0400 2011, 22:28:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132