Аппаратный эмулятор. Способ «прожги и ломай», как и его усовершенствования, описанные выше, часто позволяют решить поставленную задачу. Однако этот способ не идеален. Во-первых, он требует использования дополнительных ресурсов, таких, как последовательный порт. Во-вторых, и это более важно, он не обеспечивает обнаружения ошибочных операций на аппаратном уровне. Чтобы понять это последнее утверждение, представьте себе, что в вашем приборе возникает отказ, потому что он неправильно пытается записывать в РПЗУ. Это вы уже поняли, однако дальше дело застопорилось, так как трудно с помощью программной точки останова локализовать ошибку, обнаруживаемую только аппаратно. В нашем примере ошибка могла заключаться в затирании содержимого регистра. Это весьма неприятная ошибка: сбой происходит спустя значительное время после инициировавшего затирание события, и понять, в чем дело, изучая текст программы, нельзя. В таких случаях вам требуется поставить «аппаратную точку останова».
Решение лежит в использовании аппаратного эмулятора. Это коробка (или вставляемая плата) с аппаратными средствами, эмулирующая на этот раз микропроцессор вашего прибора. Она подсоединяется к налаживаемому прибору посредством кабеля, имеющего на конце разъем, имитирующий ЦП. Аппаратный эмулятор может выполнять как программу, находящуюся в памяти налаживаемого прибора (РПЗУ или ОЗУ), так и программу, загружаемую вами в эмулятор. В любом случае эмулятор осведомлен обо всем, что происходит в ЦП; он может следить за содержимым регистров, а также устанавливать аппаратные точки останова. Например, для решения нашей гипотетической проблемы можно потребовать от эмулятора, чтобы он фиксировал циклы записи в адресное пространство, занимаемое РПЗУ, и выдавал дамп регистров и листинг последних 100 команд, выполнявшихся перед неправильной записью в РПЗУ.
Аппаратная эмуляция является наилучшим средством разработки программ, обеспечивая максимальную гибкость и скорость работы. К ее недостаткам следует отнести высокую стоимость (несколько тысяч долл., иногда гораздо больше) и необходимость приобретать новый эмулятор для каждого типа используемого вами микропроцессора. Эмулятор ПЗУ, для сравнения, не является «процессорно-зависимым», но и уступает аппаратному эмулятору по своим возможностям. Это, так сказать, аппаратный эмулятор бедняка.
Системы разработки. «Система разработки» — это обобщенный термин для комбинации кросс-ассемблера, программатора РПЗУ и аппаратного эмулятора. Традиционно такие средства выпускались в виде внушительных автономных систем, однако в настоящее время большую популярность завоевывают вставные платы, использующие компьютер в качестве вычислительной базы, и, возможно, управляющие внешним блоком, содержащим дополнительные схемы. Как бы они не выглядели, вам необходимо приобрести такого рода систему, если вы специализируетесь на разработке микропроцессорных устройств, ориентированных на конкретный микропроцессор. Обычно системы разработки предлагаются фирмами, выпускающими микропроцессорные семейства. Некоторые фирмы, кроме того, изготавливают «универсальные эмуляторы», в которые можно вставлять платы с микропроцессорами разных типов. Системы разработки выпускаются, в частности, фирмами Hewlett-Packard, Tektronix, Microcosm, Applied Microsystems.
Логические анализаторы. Логические анализаторы можно назвать «супер-осциллографами» для разработки цифровой аппаратуры. Логический анализатор выступал в качестве главного действующего лица в книге Трейси Киддера «Душа новой машины». Эти замечательные устройства выглядят, как странные осциллографы, но в действительности включают в себя десятки каналов, большие объемы памяти, сложную логику «распознавания слов», а также средства деассемблирования выполняемых команд и представления их на экране. Логический анализатор может работать в двух режимах: анализа состояний и временного анализа. Вот как вы их должны использовать.