
Плюсы и минусы модульности
Плюсы:
Модульные программы легко составлять и отлаживать. Функциональные компоненты такой программы могут быть написаны и отлажены порознь.
Модульную программу легче сопровождать и модифицировать. Функциональные компоненты могут быть изменены, переписаны или заменены без изменений в остальных частях.
Руководству легче управлять разработкой модульной программы. Более сложные модули могут быть переданы более опытным программистам; простые модули могут быть написаны младшими программистами. Разбивая программу на модули, которые могут быть созданы за один месяц, руководитель может быть уверен, что ни один из программистов не окажется слишком перегруженным сложными элементами программы.
Минусы
Модульность требует большей дополнительной работы. Чтобы писать модульные программы, программист должен быть значительно более аккуратным на этапе проектирования программной разработки. Он должен проектировать свои программы по нисходящей схеме, начиная с верхних уровней всей программы и затем продвигаясь вниз к более детальному проектированию отдельных подпрограмм.
Модульный подход иногда требует большего времени ЦП. Эта проблема возникает прежде всего в тех случаях, когда программа отличается наличием большого числа подпрограмм, написанных на языках высокого уровня. Для обеспечения модульности может также потребоваться больше времени ЦП, если части программы с командами ввода-вывода совершенно отделены от ее вычислительных частей; входная запись может быть несколько раз передана подпрограммам, прежде чем начнется ее фактическая обработка.
В модульном подходе может потребоваться несколько больший объем памяти. Если каждой подпрограмме отводится отдельная часть рабочей памяти, то всей программе может потребоваться несколько больший объем памяти. В тех случаях, когда программа реализуется на основе большого числа подпрограмм, для обеспечения связей между ними может потребоваться дополнительная память.
Реализация функций мк
Контроллер - основное средство реализации алгоритмов управления, он должен преобразовывать поток цифровых входных данных и команд в поток управляющих выходных данных.
Алгоритмы преобразования можно реализовать двумя основными способами. Также могут применяться и различные комбинации этих способов.
Первый способ принято называть аппаратной реализацией: все необходимые функции преобразования выполняются специально разработанным устройством с определенным набором компонентов и их функциональных связей. Аппаратная реализация при прочих равных условиях минимальна с точки зрения требуемого числа компонентов, обладает максимально возможным быстродействием. Однако проектирование устройств управления с аппаратной реализацией требует очень высоких затрат. Кроме того, даже незначительное изменение алгоритмов преобразования требует повторной разработки нового устройства. В силу этих недостатков чисто аппаратная реализация в настоящее время применяется крайне редко.
Второй основной способ - программная реализация. Обычно даже сложные и самые разнообразные алгоритмы преобразования можно представить в виде конечных последовательностей относительно несложных операций (команд). Классический пример программной реализации - компьютеры, они и послужили прототипом микропроцессоров - основных технических средств этой реализации. Один и тот же набор аппаратных средств микропроцессорной системы позволяет решать самые разнородные задачи, алгоритм преобразования определяется программой, записанной в запоминающем устройстве.
Главным достоинством программной реализации является функциональная гибкость: для изменения алгоритмов или выполняемых функций необходимо модифицировать только последовательность команд в программе. Значительная функциональная избыточность микропроцессорных средств, как правило, не приводит к существенному увеличению сложности и стоимости. Все же такая реализация обладает и существенным недостатком: последовательное, а не параллельное, как при аппаратной реализации, выполнение необходимых операций требует значительных временных затрат, а это приводит к снижению быстродействия.
В технике обычно применяют компромиссные решения, которые в той или иной степени объединяют достоинства разных способов реализации. Программируемые логические интегральные схемы и микроконтроллеры - наиболее известные результаты таких компромиссов. И те, и другие средства реализации являются продуктом достижений микроэлектронных технологий и представляют большие интегральные схемы со значительными функциональными возможностями, необходимой универсальностью и гибкостью. В определенном смысле в них используются противоположные подходы, поэтому они обладают разными свойствами и разными основными областями применений.
При составлении алгоритмов решения задач придерживаются следующей последовательности:
Определить функции и состав средств микроконтроллера, необходимых для решения задачи, отдавая предпочтение аппаратной реализации требуемых функций.
Для выбранных средств реализации определить необходимые рабочие режимы, параметры этих режимов, процедуры инициализации, средства и процедуры организации взаимодействия, а также необходимые для управления и координации работы ресурсы.
В начальной части рабочей программы описать вектора прерываний и процедуры инициализации с указанием режимов и параметров для всех используемых аппаратных средств микроконтроллера.
В основной части программы организовать выполнение всех программно реализуемых функций, включая процедуры взаимодействия как аппаратно реализуемых, так и программно реализуемых функций.
Дополнить основную программу подпрограммами обслуживания векторов прерываний, необходимых для программной поддержки работы аппаратных средств.
Проверить корректность работы всех средств, используемых для решения задачи. Конфликты между параллельно работающими средствами микроконтроллера наиболее часто могут возникать из-за конкуренции при использовании общих ресурсов (регистров общего назначения, ячеек памяти данных, времени работы процессора и т.п.).
Рассмотрим пример программной реализации алгоритма. Стандартный цикл работы микропроцессорной системы для очередной команды будет такой:
По сигналам устройства управления микропроцессора производится считывание и ввод в регистр команд кода очередной команды по адресу, указанному в программном счетчике.
Содержимое программного счетчика автоматически инкрементируется (увеличивается на единицу) для определения следующего адреса хранения кодов программы.
Если код команды поступил в микропроцессор полностью, команда выполняется; если требуется чтение недостающих элементов кода, повторяется считывание с автоматическим инкрементом адреса в программном счетчике (повторение пункта 1 и 2).
Когда очередная команда программы микропроцессорной системы выполнена, в программном счетчике уже содержится адрес следующей команды и начинается следующий рабочий цикл (пункт 1).
Теперь возьмем процедуру сложения двух переменных. Полагаем, что однобайтовые слагаемые D1 и D2 хранятся в ячейках памяти по двухбайтовым адресам А1 и А2, полученный однобайтовый результат необходимо сохранить по адресу A3, а последовательность кодов программы сложения также хранится в ячейках памяти с начальным адресом А4. С учетом особенностей работы микропроцессорной системы алгоритм должен предусматривать ввод из памяти в регистры микропроцессора обоих слагаемых, сложение содержимого двух регистров данных и пересылку в память полученного результата.
Эта последовательность команд при использовании мнемонических обозначений операций для микропроцессора Intel 8080 будет следующая:
-
ml: Ida Al
чтение байта данных D1 из ячейки памяти по адресу А1 и пересылка в аккумулятор микропроцессора
m2: mov В, А
пересылка данных из аккумулятора в регистр В
13: Ida А2
чтение байта данных D2 из ячейки памяти по адресу А2 и пересылка в аккумулятор микропроцессора
т4: add В
сложение содержимого аккумулятора и регистра В (D1+D2), результат сложения помещается в аккумулятор (А-А+В)
т5: sta A3
пересылка байта данных из аккумулятора в память и запись в ячейку памяти по адресу A3
Для выполнения программы сложения начальный адрес программы А4 должен выть указан в программном счетчике. После завершения предыдущей команды устройство управления производит чтение кода из памяти по адресу А4 и его запись в регистр команд микропроцессора. Так как код этой команды содержит двухбайтовый адрес (А1), устройство управления дополнительно производит чтение остальных двух байт с автоинкрементом адреса в программном счетчике. Только после чтения всех трех байт кода команды операция может быть выполнена, т.е. адрес А1 поступит в шину адреса, байт данных D1 будет помещен в аккумулятор, а в программном счетчике - адрес следующей команды (А4+3). Далее микропроцессор производит чтение и выполнение следующей команды, автоматически формируя адреса последующих команд в программном счетчике, и т.д.
Необходимо обратить внимание на две важные особенности программной реализации. Во-первых, выполнение любой операции состоит из двух этапов: чтение и ввод кода выполняемой команды, и непосредственное выполнение команды. Для ускорения работы в современных микропроцессорах эти этапы обычно выполняют параллельно, выполнение текущей команды совмещают с вводом кода следующей команды. Во-вторых, порядок выполнения операций определяется программным счетчиком. При работе микропроцессора адрес в программном счетчике автоматически инкрементируется, что и определяет линейную очередность выполнения команд с нарастающими адресами в памяти. Если в программе требуется изменить порядок выполнения команд, необходимо изменить содержимое программного счетчика. Замена адреса в программном счетчике позволяет вызвать для выполнения другие фрагменты программы, изменяя линейную очередность выполнения команд.