Данные в программах на языках высокого уровня



Отображать объекты, применяемые в языках высокого уровня, значительно сложнее ввиду разнообразия структуры объектов, способов их размещения в памяти и областей видимости. Для примеров будем использовать язык Си, как наиболее популярный у разработчиков.

Структура объектов

 

Помимо простых переменных разной разрядности, в программах на Си используются также переменные с плавающей запятой, структуры (struct), объединения или союзы (union), указатели, одномерные и многомерные массивы. Последние могут состоять как из простых объектов, так и из сложных (структур, союзов, указателей).

Использование сложных объектов в программах, безусловно, удобно. Однако ввиду сложности их структуры крайне желательно иметь возможность её адекватного отображения на этапе отладки. В отладчиках фирмы «Фитон» сложные объекты могут отображаться как в сжатом (список значений элементов), так и в развёрнутом виде с указанием адреса, значения и типа каждого элемента массива и / или члена структуры. Реализация указателей в разных компиляторах различна. То, что МК обычно имеет несколько адресных пространств, создает дополнительные трудности, так как при работе с указателем должно быть известно, помимо адреса, и адресное пространство, куда указывает указатель. В некоторых реализациях идентификатор адресного пространства является составной частью значения указателя, в других компилятор заранее «знает» это и генерирует соответствующий код.

Кроме этого, компонент адреса в указателе может быть размером от 8 до 32 бит. При отображении значений указателей отладчик должен «знать» все детали их реализации в каждом компиляторе.

Способы размещения объектов в памяти

Помимо статических объектов, адреса которых не изменяются за время выполнения программы, в программе, написанной на языке высокого уровня, могут существовать так называемые автоматические объекты, память под которые временно отводится в стеке МК. Адреса таких объектов не абсолютны, а определяются динамически на этапе выполнения программы. Обычно они отсчитываются от текущего значения некоторой статической переменной, называемой указателем фрейма стека (Base Pointer или BP). Так как значение BP формируется программой динамически на этапе выполнения, значения автоматических объектов доступны только в пределах их области видимости, то есть при правильном значении BP. Отладчик при отображении значений автоматических объектов должен «знать» способ, которым определяются адреса, а также отслеживать правильность значения BP.

Возможно также временное размещение переменных в регистрах МК. В этом случае отладчик должен «знать», какие переменные в каких регистрах размещены и в течение какого времени. И, наконец, часто встречается ситуация, когда один и тот же объект за время своей жизни меняет способ размещения в памяти, причём не один раз. Это может происходить, например, когда функция получает один или несколько параметров в регистрах, а затем перемещает их в стек.

Область видимости объекта

Как и в ассемблерных, в программах на Си существуют глобальные объекты, доступные по имени из любого модуля, и объекты, локализованные в модуле (эти объекты объявляются как static). Однако автоматические и регистровые переменные создают отладчикам дополнительные трудности при отображении их значений. Дело в том, что, во-первых, время жизни автоматического объекта ограничено его областью видимости, а во-вторых, охватывающие области видимости могут иметь свои автоматические объекты с теми же именами. Проиллюстрируем это на примере функции, имеющей несколько вложенных областей видимости:

void f (int а)

{

long b;

if (a == 0) a++;

for (b = a * 2; b < 100; b++)

{

long с;

long a = b / 3;

if (a == 0) a++;

for (c = a; с < 10; c++)

{

char a = с == 9? 1: 0;

fl(a);

}

f2 (a);

}

f3 (a);

}

 

Переменная с именем «а» существует всё время, пока выполняется функция f, но в зависимости от того, какая часть функции выполняется, имя «а» обозначает разные переменные. При трассировке функции f отладчик должен в зависимости от того, какая переменная активна, правильно показывать её значение.

Создавая программу, разработчик не заботится о деталях реализации понятий, которые он использовал в программе. Оперируя «само собой разумеющимися» категориями, он зачастую не подозревает, как сложно было реализовать их разработчикам компиляторов и отладчиков. Последним приходится решать задачи совмещения в одной оболочке одновременно простого и интуитивного интерфейса, богатства функциональных возможностей и детальной проработки всего, что связано с реализацией особенностей архитектуры и функционирования конкретного МК. Если отладчик не предоставляет разработчику средств отладки, адекватных сложности решаемой задачи, то разработчик неизбежно теряет в производительности. Кому из нас не приходилось тратить часы и дни в поисках досадной ошибки или опечатки в исходном тексте?!

В процессе разработки и создания микропроцессорной системы рано или поздно наступает момент, когда она, наконец, воплощена в «железе» и начинает подавать признаки жизни. Однако в большинстве случаев эти признаки оказываются непредсказуемыми, система начинает жить «своей» жизнью. Многие программисты, наверное, согласятся, что каждая новая программа содержит ошибки. Отчасти поэтому новый МК на первых порах ведёт себя как «чёрный» ящик.

Для того чтобы облегчить процесс отладки систем, разработан целый класс инструментальных средств. Их основное назначение – сделать процесс функционирования отлаживаемого МК «прозрачным», то есть легко контролируемым, произвольно управляемым и модифицируемым по воле разработчика. Хороший профессиональный инструментальный комплекс дополнительно может предоставить разработчику множество сервисных услуг, тем самым существенно облегчая его труд, избавляя от рутинных операций.

К числу основных инструментальных средств отладки относятся внутрисхемные эмуляторы, программные симуляторы, платы развития (оценочные платы), мониторы отладки и эмуляторы ПЗУ. Существуют и комбинированные устройства и наборы.

Внутрисхемные эмуляторы

 

Внутрисхемный эмулятор (ВСЭ) – программно аппаратное средство, способное замещать собой эмулируемый процессор в реальном устройстве. ВСЭ – наиболее мощное и универсальное отладочное средство.

Функционально ВСЭ делятся на стыкуемые с внешней вычислительной машиной (обычно это – IBM-совместимый ПК) и функционирующие автономно. Последние имеют собственные вычислительные ресурсы и средства ввода / вывода, поэтому при равных возможностях стоят значительно дороже первых, а при одинаковой цене существенно уступают им в функциональных и сервисных возможностях.

С отлаживаемой системой ВСЭ обычно соединяют кабелем со специальной эмуляционной головкой. Относительно недавно появились модели ВСЭ, у которых такая головка конструктивно совмещена с основным блоком и вставляется в отлаживаемую систему вместо МК. Если последний невозможно удалить (выводы впаяны в плату), использование ВСЭ допустимо при условии, что этот МК имеет отладочный режим, в котором все его выводы находятся в третьем (высокоимпедансном) состоянии. В этом случае для подключения ВСЭ используют специальный адаптер-клипсу. подсоединяемый непосредственно к выводам эмулируемого МК.

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

Отладчик является своеобразным мостом между разработчиком и отладочным средством. Хороший отладчик обеспечивает загрузку отлаживаемых программ в память системы, вывод на монитор состояний и содержимого всех регистров и памяти (а при необходимости – и их модификаций), управление процессом эмуляции.

Более мощные отладчики (обычно их называют высокоуровневыми или High-Level Debuggers) позволяют также:

Ø вести символьную отладку (благодаря тому, что отладчик, используя специальную информацию, поставляемую компилятором, «знает» адреса всех символьных переменных, массивов и структур). При этом пользователь может оперировать более приемлемыми для человека символьными именами, не утруждая себя запоминанием их адресов,

Ø контролировать и анализировать не только дизассемблированный текст, но и исходный текст программы, написанной на языке высокого уровня, и даже с собственными комментариями.

Такой отладчик даёт возможность пользователю одновременно контролировать ход выполнения программы и видеть соответствие между исходным текстом, образом программы в машинных кодах и состоянием всех ресурсов эмулируемого микроконтроллера.

Следует отметить, что высокоуровневый отладчик обеспечивает выполнение всех своих функций только в том случае, если используется кросс-компилятор, поставляющий полную и правильную отладочную информацию (не все компиляторы, особенно их пиратские версии, способны на это), и при этом формат её представления «знаком» отладчику.

Эмуляционную память используют в процессе отладки вместо ПЗУ разрабатываемой системы. Более того, она позволяет отлаживать программу в отсутствие реальной системы или её макета. Если необходимо внести изменения в отлаживаемую программу, достаточно загрузить новую или модифицированную программу в память эмулятора, а не заниматься перепрограммированием ПЗУ.

Существуют ВСЭ, которые позволяют пользователю «подставлять» эмуляционную память вместо ПЗУ не только целиком, но и поблочно (в некоторых моделях минимальный размер блока – 1 байт), в порядке, определённом пользователем. Для этого ему достаточно задать распределение памяти данных и памяти программ, в соответствии с которым процессор будет получать доступ и к содержимому ПЗУ в отлаживаемой системе, и к содержимому эмуляционной памяти ВСЭ, Такую память обычно называют памятью с возможностью мэппинга.

Трассировщик представляет собой логический анализатор, работающий синхронно с процессором и фиксирующий поток выполняемых инструкций и состояния выбранных внешних сигналов. Существуют ВСЭ, позволяющие трассировать не только внешние сигналы, но и состояния внутренних ресурсов МК, например, регистров. В таких устройствах используют специальные версии МК (эмуляционные кристаллы).

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

Профилировщик (анализатор эффективности программного кода) позволяет по результатам прогона отлаживаемой программы получить информацию о числе обращений к различным участкам программы и времени, затраченном на их выполнение. Анализ статистической информации, поставляемой профилировщиком, даёт возможность выявлять «мёртвые» или перенапряженные участки программ и в результате оптимизировать структуру отлаживаемой программы.

Интегрированная среда разработки – это совокупность программных средств, поддерживающая все этапы разработки программного обеспечения от написания исходного текста программы до её компиляции и отладки и обеспечивающая простое и быстрое взаимодействие с программным отладчиком-симулятором и программатором.

Наличие в программной оболочке ВСЭ встроенного редактора, менеджера проектов и системы управления существенно облегчает работу разработчика, избавляя его от множества рутинных действий. Для него стирается грань между написанием программы, её редактированием и отладкой. Переход от редактирования исходного текста к отладке и обратно осуществляется «прозрачно» и синхронно с активизацией соответствующих окон. Менеджер проектов по мере необходимости автоматически запускает компиляцию и активизирует соответствующее окно программного интерфейса. Столь же просто можно перейти к отладке проекта с помощью имеющегося отладчика-симулятора или приступить к «прошивке» ПЗУ отлаженной программой,

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

В общем же случае возможности ВСЭ по контролю и управлению функционированием отлаживаемых устройств могут быть ограничены (например, некорректной обработкой прерываний в пошаговом режиме, запретом на использование последовательного порта и т.п.). Также необходимо помнить, что у каждой модели ВСЭ – свой перечень поддерживаемых МК и компиляторов.

Однако для большинства популярных МК разработаны ВСЭ, не имеющие ограничений по использованию ресурсов отлаживаемых кристаллов. Возможности такого ВСЭ проиллюстрируем на примере модели PICE-51 фирмы «Фитон».

PICE-51 – устройство, созданное с применением программируемых логических ИС (ПЛИС). Это позволило резко уменьшить размеры ВСЭ, минимизировать отклонения его электрических и частотных характеристик от характеристик эмулируемого МК и тем самым добиться максимальной точности эмуляции на частотах до 33 МГц при напряжениях питания от 3,3 до 5 В. Перезагружаемая аппаратная структура PICE-51 обеспечивает эмуляцию практически всех МК семейства MCS-51. Программная поддержка работает в среде Windows.

PICE-51 состоит из основной платы, сменного адаптера под конкретную группу МК и сменной эмуляционной головки также под конкретный тип корпуса. На основной плате собраны трассировщик и процессор точек останова, на плате сменного адаптера – эмулирующий процессор под конкретный тип МК. Эмуляционные головки обеспечивают установку прибора в розетки DIP и PLCC на плате пользователя. Питание осуществляется от блока с выходным напряжением +5 В (0,5 А) или от отлаживаемого устройства. Связь с компьютером – по гальванически развязанному каналу RS-232C при скорости 115 кБод.

Остальные характеристики и возможности PICE-51 следующие:

Ø точная эмуляция – отсутствие каких-либо ограничений на использование программой пользователя ресурсов МК;

Ø до 256 Кбайт эмулируемой памяти программ и данных. Поддержка банкированной модели памяти. Распределение памяти между ВСЭ и устройством пользователя с точностью до 1 байта;

Ø до 512К аппаратных точек останова по доступу к памяти программ и данных;

Ø аппаратная поддержка для отладки программ на языках высокого уровня;

Ø трассировка восьми произвольных внешних сигналов;

Ø четыре выхода синхронизации аппаратуры пользователя;

Ø трассировщик реального времени с буфером объёмом от 16 до 64К фреймов (массивов) по 64 бита с доступом «на лету». Трассировка адреса, данных, сигналов управления, таймера реального времени и восьми внешних сигналов пользователя;

Ø программируемый фильтр трассировки;

Ø аппаратный процессор точек останова с возможностью задания сложного условия останова эмуляции по комбинации сигналом адреса, данных, управления, восьми внешних сигналов, таймера реального времени, счётчиков событий и таймера задержки;

Ø четыре комплексных точки останова, которые могут быть использованы независимо или в комбинациях по условиям AND/OR/IF-THEN;

Ø 48-разрядный таймер реального времени;

Ø «прозрачная» эмуляция – доступ «на лету» к эмулируемой памяти, точкам останова, процессору точек останова, буферу трассировки, таймеру реального времени;

Ø управляемый генератор тактовой частоты для эмулируемого МК. Возможность плавного изменения её от 500 кГц до 40 МГц;

Ø встроенная система самодиагностики аппаратуры ВСЭ, Поддерживается разработка программ на уровне ведения проектов для макроассемблера MCA-51 («Фитон»/ «Микрокосм»), а также для пакетов кросс-средств фирм Keil Software и IAR Systems;

Ø поддержка полнофункциональной символьной отладки программ, созданных с помощью следующих компиляторов: ассемблера ASM51 фирмы Intel, компилятора PL/M фирмы Intel, ассемблеров и компиляторов Си фирм Avocet Systems, Hi-Tech, Tasking Software;

Ø автоматическое сохранение и загрузка файлов конфигурации аппаратуры, интерфейса и опций отладки. Обеспечена совместимость файлов конфигурации с симулятором PDS-51 и переносимость проектов между PICE-51 и симулятором PDS-51;

Ø возможность настройки цветов, шрифтов и других параметров для всех окон одновременно и для каждого окна в отдельности.

Столь широкий набор функциональных возможностей делает ВСЭ наиболее мощным и универсальным средством отладки.

Симуляторы

Симулятор – программное средство, способное имитировать работу МК и его памяти. Как правило, оно состоит из отладчика, модели центрального процессора и памяти. Более совершенные устройства содержат в своём составе модели встроенных периферийных устройств (таймеров, портов, АЦП и систем прерываний).

Симулятор должен «уметь» загружать файлы программ во всех популярных форматах, максимально полно отображать информацию о состоянии ресурсов симулируемого МК, а также предоставлять возможности по симуляции выполнения загруженной программы в различных режимах. В процессе отладки модель выполняет программу, и на экране монитора компьютера отображается текущее состояние модели.

Загрузив программу в симулятор, пользователь может запускать её в пошаговом или непрерывном режиме, задавать условные или безусловные точки останова, контролировать и свободно модифицировать содержимое ячеек памяти и регистров симулируемого МК. Симулятор позволяет быстро проверить логику выполнения программы, правильность выполнения арифметических операций.

В зависимости от класса используемого отладчика некоторые модели симуляторов поддерживают высокоуровневую символьную отладку программ.

Симулятор может содержать и ряд дополнительных программных средств, например интерфейс внешней среды. Наличие такого интерфейса позволяет создавать и гибко использовать модель внешней среды МК, функционирующую и воздействующую на отлаживаемую программу по заданному алгоритму.

В реальной системе МК обычно «занимается» считыванием информации с подключенных к нему внешних устройств (датчиков), обработкой её и выдачей управляющих сигналов на исполнительные устройства. Для того чтобы в простом симуляторе смоделировать работу датчика, нужно вручную изменять текущее состояние модели периферийного устройства, к которому в реальной системе подключен датчик. Если, например, при приёме байта через последовательный порт устанавливается некоторый флажок, а сам байт попадает в определённый регистр, то оба эти действия нужно производить в симуляторе вручную. В некоторых моделях эта проблема решена: симуляторы имеют встроенные средства для создания моделей подключенных к МК внешних устройств, включая средства графического отображения информации.

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

Отладочные мониторы

 

Отладочный монитор – специальная программа, загружаемая в память отлаживаемой системы. Она вынуждает МК выполнять, кроме прикладной задачи, ещё и отладочные функции:

Ø загрузку прикладных кодов пользователя в свободную от монитора память;

Ø установку точек останова;

Ø запуск и останов загруженной программы в реальном времени;

Ø проход программы пользователя по шагам;

Ø просмотр, редактирование содержимого памяти и управляющих регистров.

Программа монитора работает «в связке» с компьютером или пассивным терминалом, на которых и происходят визуализация и управление процессом отладки. Достоинство этого подхода – очень малые затраты при сохранении возможности вести отладку в реальном масштабе времени, главный недостаток – отвлечение ресурсов МК на отладочные и связные процедуры (монитор занимает некоторый объём памяти, прерывания, последовательный канал). Недавно появились программы, которые практически не занимают аппаратных ресурсов МК (о них будет рассказано в разделе «Эмуляторы ПЗУ»).

Платы развития

Платы развития, или, как принято их называть в зарубежной литературе, оценочные платы (Evaluation Boards), – своеобразные конструкторы для макетирования прикладных систем. В последнее время многие фирмы-производители, выпуская новые модели МК, предлагают и соответствующие платы развития. Обычно это печатная плата с установленными на ней МК и всеми необходимыми для его нормальной работы элементами, а также системами связи с компьютером. Как правило, на плате предусмотрено свободное место для монтажа разрабатываемого устройства пользователя. Иногда имеется и готовая «разводка» для установки рекомендуемых фирмой дополнительных устройств (ПЗУ ОЗУ, ЖК-дисплея, клавиатуры, АЦП и др.). Платы, доработанные пользователем, выгодно использовать в качестве одноплатных, контроллеров, встраиваемых в мелкосерийную продукцию (5…20 шт.).

Для удобства пользователя платы развития комплектуются ещё и простейшим отладочным средством на базе монитора отладки. Здесь проявились два разных подхода: один используется для МК, имеющих внешнюю шину, а второй – для МК, не имеющих её.

В первом случае отладочный монитор поставляется в виде микросхемы ПЗУ, которую устанавливают в специальную розетку на плате развития. Плата также имеет ОЗУ для программ пользователя и канал связи с компьютером или терминалом, Примером может служить плата развития, разработанная фирмой Intel для МК семейства МCS-51.

Во втором случае плата развития содержит встроенные системы программирования внутреннего ПЗУ МК, которые управляются компьютером. Программу монитора заносят в ПЗУ МК вместе с прикладной, подготовленной соответствующим образом (в нужные места вставляют вызовы отладочных подпрограмм монитора). Затем осуществляется пробный прогон. Чтобы внести исправления в отлаживаемую программу, её стирают из ПЗУ и записывают в него откорректированную. Готовую прикладную программу получают из отлаженной путём удаления монитора и всех вызовов его функций. На такой алгоритм отладки рассчитаны платы развития для МК семейств PICmicro (Microchip), 80С750 (Philips), 89С2051 (Atmel).

Платы развития иногда комплектуются программами отладки, которые запускают на внешнем компьютере «в связке» с монитором. Эти программы в последнее время заметно усложнились и зачастую имеют высокопрофессиональный набор отладочных функций (например, отладчик-симулятор) или различные элементы, присущие в чистом виде только интегрированным средам разработки. В состав комплектов могут входить и программы прикладного характера, наиболее часто встречающиеся на практике.

Отладочные возможности комплекта «плата развития плюс монитор» не столь универсальны, как возможности ВСЭ, к тому же некоторая часть ресурсов МК в процессе отладки отбирается для работы монитора. Тем не менее, наличие законченного набора готовых программно-аппаратных средств, позволяющих без потери времени приступить к монтажу и отладке прикладной системы, во многих случаях является решающим фактором. Особенно если учесть, что стоит такой комплект в несколько раз меньше, чем более универсальный эмулятор.

Эмуляторы ПЗУ

Эмулятор ПЗУ – программно-аппаратное средство, позволяющее заменять ПЗУ отлаживаемого устройства на ОЗУ, в которое можно загрузить программу с компьютера через один из стандартных каналов связи. Оно позволяет пользователю избежать многократных циклов перепрограммирования ПЗУ. Эмулятор ПЗУ используют только для отладки программ МК, которые способны обращаться к внешней памяти программ. По сложности и стоимости это устройство сравнимо с платами развития. У него одно большое достоинство – универсальность. Эмулятор ПЗУ может работать с любыми МК.

Первые эмуляторы ПЗУ позволяли только загружать программу, запускать её и останавливать, используй общий сброс. Затем появились усложнённые модели с аппаратной выработкой сигналов трассировки на осциллограф по достижении определённого адреса. Эмулируемая память в таких изделиях была доступна для просмотра и модификации, однако контроль за внутренними управляющими регистрами МК был до недавнего времени невозможен.

В последнее время появились так называемые интеллектуальные эмуляторы ПЗУ. Они позволяют «заглядывать» внутрь МК на плате пользователя и по управлению отладкой похожи на ВСЭ. Фирма Cactus даже представляет свой фактически интеллектуальный эмулятор ПЗУ, как ВСЭ ряда МК, настолько невозможно отличить работу с тем и другим. В действительности же процессор в этом случае не замещается, а используется тот, что стоит на плате пользователя.

Интеллектуальный эмулятор ПЗУ – это гибрид обычного эмулятора ПЗУ, отладочного монитора и системы быстрого переключения шины с одного на другой. Этим создаётся эффект, как если бы монитор отладки был установлен на плате пользователя, и при этом он практически не занимает у МК аппаратных ресурсов, кроме небольшой (примерно 4 Кбайт) зоны программных шагов. Подобный эмулятор разработан, например, фирмой «Фитон» для всех существующих и будущих МК, которые имеют ядро 8051, но дополнительно насыщены различными устройствами ввода / вывода. Изделие поддерживает множество самых разных МК фирм Philips, Siemens, OKI.


Дата добавления: 2018-10-26; просмотров: 184; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!