Рефераты. Микроконтроллеры для начинающих. И не только

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

Описанный процесс выглядит довольно громоздким: разработчик должен вручную запускать разнообразные программы (текстовый редактор, компилятор Си, линкер), помнить управляющие ключи, искать ошибки в программе по номерам строк в файле. Последним на сегодняшний день шагом в облегчении труда разработчика программ для МК стало появление интегрированных сред разработки (Integrated Development Environment, IDE). Интегрированная среда разработки – это компьютерная программа, связывающая воедино все этапы разработки программы. Она совмещает в себе текстовый редактор для написания исходных текстов, трансляторы с ассемблера и Си, линкер, отладчик, справочную информацию по МК и другие средства, необходимые разработчику. Настройка трансляторов, линкера и других компонентов производится не методом указания ключей в командной строке, а в виде диалоговых окон, где нужно только расставить «галочки» в нужных местах. Преобразование исходных текстов программ в файл машинных кодов запускается одной клавишей.

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

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

Основные характеристики наиболее популярных пакетов средств разработки приведены в таблице.

 

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теперь рассмотрим, как отладчик должен интерпретировать символьную информацию, и какие возможности должны в связи с этим предоставляться пользователю.

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

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

Страницы: 1, 2, 3, 4, 5, 6, 7



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.