Содержание материала

Разработка программного обеспечения для микропроцессорной системы является такой же ответственной и трудоемкой задачей, как и проектирование аппаратной части. Можно утверждать, что чем более развито программное обеспечение, тем более эффективно использование встроенного микропроцессора.
Программа микропроцессора - это размещенная в памяти программ последовательность команд, каждая из которых состоит из двоичных кодов операций и двоичных адресов операндов.
Каждый микропроцессор характеризуется своей системой команд. Имея такой список машинных кодов команд, алгоритм решаемой задачи и технические средства для записи двоичных чисел в программную память можно запрограммировать микропроцессор. Однако способ программирования на уровне машинных кодов очень редко применяется на практике вследствие чрезвычайно высокой трудоемкости.
Для повышения производительности и качества программирования при подготовке программ встраиваемых микропроцессоров используются средства персональных компьютеров. Исходный текст программы создается в текстовом редакторе на языке более понятном и наглядном человеку, чем колонка двоичных чисел. Специальные программы позволяют перевести исходные тексты в машинные коды.
Для программирования на уровне системы команд микропроцессора широко используют язык ассемблера, который отличается от других языков программирования тем, что каждая его команда транслируется в одну команду в двоичном коде. Поэтому по исходному тексту программы, написанной на ассемблере, можно определить время ее исполнения и объем программной памяти, необходимой для ее хранения.
Кроме того, используются языки программирования высокого уровня. Так, широкое распространение для программирования встраиваемых микропроцессоров получил язык С. Он предоставляет программисту такой же легкий доступ ко всем ресурсам микропроцессора, как и ассемблер. Вместе с тем, он позволяет создавать хорошо структурированные программы и, как любой язык высокого уровня, открывает возможность большого набора библиотечных функций для выполнения стандартных операций.
Часто при проектировании программного обеспечения совместно используются язык высокого уровня для основной программы и язык ассемблера для написания отдельных подпрограмм, время выполнения которых необходимо строго контролировать. При этом исходные тексты транслируются в машинные коды различными трансляторами, а затем объединяются в один выходной модуль при помощи программы-компоновщика.
Для того, чтобы построить надежную программную систему, работающую без сбоев, важно с самого начало ясно представить себе ее структуру. С этой целью необходимо выделить функции, которые выполняет в проектируемом устройстве микропроцессор. Первейшей задачей микропроцессора является обслуживание аппаратных узлов. Это управление коммутатором, усилителем и другими устройствами в аналоговой части, обслуживание АЦП, опрос цифровых входных сигналов, опрос клавиатуры, обслуживание последовательного канала, обслуживание индикации и т.д. Для каждого аппаратного узла, требующего программного обслуживания, необходимо написать драйвер (подпрограмму или набор подпрограмм). Он запускается по запросу аппаратного узла, выполняет необходимые действия и организует обмен данными аппаратного узла с основной программой при помощи различных буферов обмена, организуемых в памяти. Именно драйверы аппаратных узлов часто пишут на языке ассемблера, чтобы добиться минимального времени их исполнения. Отдельные драйверы объединяются в систему, адаптируются с целью обеспечения своевременного обслуживания всех запросов аппаратной части при совместной работе [9,10].
Система драйверов маскирует аппаратные особенности микропроцессорной системы и представляет удобный интерфейс основной программы с источниками и приемниками данных. Поэтому при написании основной программы можно абстрагироваться от аппаратных особенностей, сосредоточиться на сути решаемой задачи по обработке и передаче данных. При этом удобно использовать языки высокого уровня, которые снимают с программиста заботы по распределению памяти, содержат математические библиотеки, позволяют создавать более короткий и ясный текст программы.
Программное обеспечение, созданное по рассмотренной схеме, может быть названо операционной системой реального времени. Следует отметить, что известны различные философские представления о способах построения операционных систем [9.10], но перед каждым разработчиком, программирующим встраиваемый микропроцессор, открывается увлекательная возможность предложить свой вариант построения программного обеспечения.