Символьная отладка программ для МК

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

Другие используют в своей практике самодельные отладочные мониторы – наборы специальных подпрограмм, загружаемых в МК вместе с основной программой. Последняя вызывает в контрольных точках подпрограммы монитора, а те выдают информацию о состоянии ресурсов МК. Таким способом можно отладить практически любую программу, но у него есть недостатки, которые могут оказаться существенными. Во-первых, отладочному монитору необходимо предоставить для работы часть ресурсов МК: как минимум – часть адресного пространства кода и некоторое число ячеек стека, а как максимум – ещё часть ОЗУ и периферийные устройства МК, используемые монитором для отображения информации. Выделить ресурсы отладочному монитору бывает непросто, если основная программа сама активно загружает МК. Например, у МК PIC16C5x (Microchip) всего две ячейки стека, и использовать вызовы подпрограмм отладочного монитора затруднительно. Во-вторых, вызовы монитора отнимают время у основной программы и, следовательно, его нельзя вызывать из критичных ко времени частей программы. В-третьих, создание отладочного монитора, само по себе, требует времени.

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

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

Каковы же преимущества программирования на Си по сравнению с программированием на ассемблере? Вкратце они заключаются в следующем:

Ø отпадает необходимость заботиться об операциях с числами большой разрядности. Компилятор автоматически сгенерирует правильный код для операции a + b, если a и b будут 8-, 16-, 32-битными числами, числами с плавающей запятой и даже числами разных типов;

Ø в комплекте с компилятором поставляется обширная библиотека функций (подпрограмм), реализующих различные математические операции (тригонометрические функции, возведение в степень и т.п.), работу с символьными строками, форматированный ввод / вывод и т.д.;

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

Ø исходный текст, написанный на Си, гораздо легче читается, он компактнее, легче модифицируется;

Ø программы, написанные на Си, легче переносятся на MК других семейств.

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

Ø компилятор должен предоставлять достаточную информацию о структуре программы и используемых ею данных. Эту информацию называют символьной (отладочной);

Ø отладчик должен уметь интерпретировать эту информацию.

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

Перейти на страницу: 1 2

Советуем почитать:

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

Проектирование управляющей ИМС для импульсных источников питания по типу TDA16846
Целью дипломного проекта является проектирование управляющей ИМС для импульсных источников питания по типу TDA16846. Существует класс блоков электропитания, в которых напряжение сети ...

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

Меню



© 2015 TechExternal