Скачиваний:
511
Добавлен:
16.04.2015
Размер:
3.42 Mб
Скачать

1.6. Разработка прикладных программ

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

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

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

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

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

Разработка прикладных программ для МК на ассемблере и языках высокого уровня производится с использованием специальных инструментальных систем программирования и отладки.

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

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

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

Редактор текста – программа, предназначенная для ввода и редактирования исходных текстов разрабатываемой программы с последующей ее записью в виде текстового исходного модуля. В принципе, для этой цели может использоваться практически любой редактор текста, однако чаще в инструментальных системах используются свой, специализированный для разработки программ редактор, который имеет ряд дополнительных функций. В первую очередь к таким функциям относятся: одновременная обработка нескольких модулей в многооконном режиме; выделение цветом синтаксических конструкций используемого языка программирования; ускоренный ввод операторов языка путем нажатия определенных комбинаций клавиш; запуск внешних программ с передачей им ряда параметров, включая и имена редактируемых модулей.

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

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

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

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

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

HEX-конвертер. Компоновщик формирует выходной файл в двоичном формате, однако этот формат загрузки является не единственным. Зачастую более удобным для применения является широко распространенный шестнадцатеричный HEX-формат фирмы Intel. Для преобразования двоичного формата в этот формат и используется HEX-конвертер.

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

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

Рис. 1.26. Процесс разработки прикладных программ


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

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

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

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

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

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

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

Вообще говоря, процесс создания прикладных программ весьма схож с аналогичным процессом разработки программ для персональных компьютеров, и естественно, что опыт создания для них систем автоматизации программирования был распространен и на инструментальные системы для разработки программного обеспечения МК. Это привело к появлению и широкому распространению интегрированных сред разработки (IDE – Inte­gra­ted Development Environment). Интегрированная среда объединяет все описанные этапы разработки прикладной программы в единый рекурсивный процесс, в котором в любой момент времени возможен быстрый возврат к любому предыдущему этапу. Интегрированная среда построена на стандартном оконном интерфейсе и управление процессом разработки и отладки прикладных программ возложено на дополнительные средства – менеджер проектов и построитель задач.

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

84

Соседние файлы в папке Микроконтроллеры