Введение

Отладка встроенных систем

Аппаратная эмуляция в схеме (ICE) – это использование аппаратного устройства или эмулятора схемы для отладки программного обеспечения встроенной системы. Она работает за счет использования процессора с дополнительной возможностью поддержки операций отладки, а также выполнения основной функции системы. Особенно для старых систем с ограниченными процессорами, это обычно подразумевало временную замену процессора аппаратным эмулятором – более мощной, хотя и более дорогой версией. Исторически это реализовывалось в виде процессора с выводами контактов, у которого множество внутренних сигналов выводились для целей отладки. Эти сигналы предоставляют информацию о состоянии процессора. В последнее время этот термин также охватывает аппаратные отладчики на основе JTAG, которые обеспечивают эквивалентный доступ, используя встроенное аппаратное обеспечение для отладки стандартных производственных микросхем. Использование стандартных микросхем вместо специализированных версий с выводами контактов делает технологию повсеместной и недорогой, а также устраняет большинство различий между средой разработки и средой выполнения. В этом распространенном случае термин "эмулятор в схеме" является неточным, а иногда и вводящим в заблуждение, поскольку эмуляция больше не используется. Встроенные системы представляют особые проблемы для программистов, поскольку они обычно не имеют клавиатур, мониторов, дисководов и других пользовательских интерфейсов, которые присутствуют на компьютерах. Эти недостатки делают инструменты отладки программного обеспечения в схеме необходимыми для многих распространенных задач разработки.

Функция

Эмулятор встроенных цепей (ICE) предоставляет возможность заглянуть внутрь встраиваемой системы. Программист использует эмулятор для загрузки программ во встраиваемую систему, их запуска, пошагового выполнения, а также для просмотра и изменения данных, используемых программным обеспечением системы. Эмулятор получил свое название, поскольку он эмулирует (имитирует) центральный процессор (CPU) компьютера встраиваемой системы. Традиционно он имел разъем, который вставлялся в гнездо, предназначенное для интегральной схемы CPU. Большинство современных систем используют процессор целевой системы напрямую, с использованием специального отладочного доступа на основе JTAG. Эмуляция процессора или прямой доступ к нему через JTAG позволяет ICE выполнять любые действия, которые способен выполнять процессор, но под управлением разработчика программного обеспечения. ICE подключает к встраиваемой системе компьютерный терминал или персональный компьютер (ПК). Терминал или ПК предоставляет интерактивный пользовательский интерфейс для программиста, позволяющий исследовать и управлять встраиваемой системой. Например, обычно используется отладчик на уровне исходного кода с графическим интерфейсом, который взаимодействует через адаптер JTAG (эмулятор) с встраиваемой целевой системой, не имеющей графического пользовательского интерфейса. Важно отметить, что при сбое программы большинство встраиваемых систем просто становятся неработоспособными. Встраиваемым системам часто не хватает базовых функций для обнаружения признаков сбоя программного обеспечения, таких как блок управления памятью (MMU) для перехвата ошибок доступа к памяти. Без ICE разработка встраиваемых систем может быть чрезвычайно сложной, поскольку обычно невозможно определить причину ошибки. С ICE программист обычно может тестировать отдельные фрагменты кода, затем изолировать ошибку до конкретного участка кода, а затем изучить неисправный код и переписать его для устранения проблемы. В процессе работы ICE предоставляет программисту точки останова выполнения, отображение и мониторинг памяти, а также управление вводом/выводом. Кроме того, ICE может быть запрограммирован на поиск любого диапазона соответствующих критериев для остановки, чтобы попытаться определить источник сбоя. Большинство современных микроконтроллеров используют ресурсы, предусмотренные в производственной версии микроконтроллера, для программирования устройства, эмуляции и отладки, вместо того чтобы требовать специальную эмуляционную версию (то есть, с выводами) целевого микроконтроллера. Несмотря на то, что это экономически эффективный метод, поскольку модуль ICE управляет только эмуляцией, а не фактически эмулирует целевой микроконтроллер, приходится идти на компромиссы, чтобы поддерживать низкие цены на этапе производства, но при этом обеспечивать достаточное количество функций эмуляции для (относительно небольшого числа) приложений эмуляции.

Преимущества

Практически все встраиваемые системы имеют аппаратную и программную составляющие, которые разделены, но тесно взаимосвязаны. ICE (In-Circuit Emulator) позволяет запускать и тестировать программную часть на аппаратном обеспечении, для которого она предназначена, при этом предоставляя программисту инструменты для изоляции неисправного кода, такие как отладка на уровне исходного кода (отображающая программу в ее первоначальном виде) и пошаговое выполнение (позволяющее программистам запускать программы шаг за шагом для поиска ошибок). Большинство ICE состоят из адаптерного блока, расположенного между хост-компьютером ICE и тестируемой системой. Кабель и соединительный разъем подключают адаптер к гнезду, в котором встраиваемый центральный процессор (ЦП) или микроконтроллер устанавливается во встраиваемой системе. Современные ICE позволяют программистам получать доступ к встроенной в ЦП отладочной схеме через интерфейс JTAG или режим отладки по второму каналу (BDM) для отладки программного обеспечения встраиваемой системы. Эти системы часто используют стандартную версию чипа ЦП и могут подключаться непосредственно к отладочному порту на серийной системе. Их иногда называют отладчиками в схеме (ICD), чтобы подчеркнуть, что они не дублируют функциональность ЦП, а управляют уже существующим стандартным ЦП. Поскольку замена ЦП не требуется, они могут работать на серийных устройствах, где ЦП припаян и не может быть заменен. В процессорах x86 Pentium ICE используют специальный "режим зондирования" для облегчения отладки. В контексте встраиваемых систем ICE не эмулирует аппаратное обеспечение. Вместо этого он обеспечивает прямой доступ к отладке фактического ЦП. Система, находящаяся под тестом, находится под полным контролем, что позволяет разработчику загружать, отлаживать и тестировать код напрямую. Большинство хост-систем – это обычные коммерческие компьютеры, не связанные с ЦП, используемым для разработки. Например, ПК с Linux может использоваться для разработки программного обеспечения для системы, использующей чип Freescale 68HC11, процессор, который не может запускать Linux. Программист обычно редактирует и компилирует код встраиваемой системы также на хост-системе. Хост-система будет оснащена специальными компиляторами, которые генерируют исполняемый код для встраиваемой системы, называемые перекрестными компиляторами или перекрестными ассемблерами.

Ошибка на чипе

Отладка на кристалле является альтернативой эмуляции в схеме. Она использует иной подход для достижения аналогичной цели. Отладка на кристалле, часто неформально называемая Joint Test Action Group (JTAG), использует предоставление дополнительного интерфейса отладки к работающему оборудованию непосредственно в производственной системе. Она предоставляет те же возможности, что и отладка в схеме, такие как проверка внутреннего состояния или переменных, и может поддерживать установку контрольных точек, точек останова и точек слежения. Отличие заключается в том, что это обеспечивается дополнительной кремниевой частью внутри производственного процессора, а не заменой процессора на внебортовой эмулятор отладки. По этой причине некоторые функции ICE могут изменяться в соответствии со спецификациями процессора. Дополнительный интерфейс JTAG добавляется к контроллерной плате и требуется в каждой производственной системе, однако, поскольку для этого требуется лишь несколько сигнальных выводов, дополнительные затраты минимальны. Интерфейсы JTAG изначально разрабатывались и до сих пор полезны для финального тестирования производства.

Информация

Для поддержки отладки с помощью внутрисхемного эмулятора (ICE) на Intel 286, на процессоре было доступно пять дополнительных выводов: один входной вывод для внешнего принудительного вызова точки останова ICE (ICEBP#) и две альтернативные пары выходных выводов для выбора операций через шину ICE вместо обращения к пользовательской памяти. На 80286 существуют две инструкции (0F 04, 0F 05) для сохранения/восстановления полного состояния процессора в область памяти с адресом смещения 0x800, а также однобайтовый префикс переопределения (F1) для включения режима ICE и получения доступа к пользовательской памяти.