- •6. Проектирование микропроцессорных систем
- •6.1. Представление системы как объекта проектирования
- •6.2. Основные этапы проектирования
- •6.3. Разработка архитектуры системы
- •6.4. Проектирование аппаратных средств
- •6.4.1. Схемотехническое проектирование процессора
- •6.4.2. Схемотехническое проектирование памяти
- •Банкирование памяти
- •Организация банков памяти
- •Проектирование запоминающих устройств
- •6.4.3. Схемотехническое проектирование интерфейса
- •Организация ввода/вывода данных
- •6.4.4. Тестирование и настройка аппаратных средств
- •Тестирование статическими сигналами
- •Свободный прогон микропроцессора
- •6.5. Проектирование программных средств
- •6.5.1. Этапы жизненного цикла программы
- •6.5.2. Точная постановка задачи и формулировка требований к программе
- •Постановка задачи ввода данных в озу
- •6.5.3 Проектирование программы
- •Декомпозиция общей задачи
- •Декомпозиция задачи ввода данных в озу
- •Структуры данных
- •Разработка структуры данных программы для ввода данных в озу
- •Алгоритмизация программы
- •Подходы к алгоритмизации
- •Иерархическая организация алгоритма
- •Алгоритмизация программы для ввода данных в озу
- •1. Модуль "Тестовый контроль озу по шд" (dTstContr)
Алгоритмизация программы для ввода данных в озу
Пример 6.7:
Выполнить алгоритмизацию программы работы устройства для ввода данных в ОЗУ.
Из статической модели этой программы (см. примеры 6.4, 6.6 и рис. 6.27, 6.28) следует, что для решения поставленной задачи необходимы следующие программные модули:
1) "Ввод режимов" (ModeInput);
2) "Ввод с клавиатуры" (KbdInput);
3) "Преобразование очередной цифры" (NxtDigTrf);
4) "Формирование информации" (InfoForm);
5) "Формирование массивов отображения" (DispForm);
6) "Вывод сообщения о типе ввода" (InTpMesOut);
7) "Вывод числовой информации" (NumInfOut);
8) "Вывод сообщений об ошибках" (ErMesOut);
9) "Контроль ввода с клавиатуры" (KbdInContr);
10) "Тестовый контроль ОЗУ по ШД" (DTstContr);
11) "Тестовый контроль ОЗУ по ША" (ATstContr);
12) "Подготовка".
В скобках указаны символьные имена, присвоенные соответствующим программным модулям с целью их дальнейшего использования. Выбранные имена отражают содержательный смысл этих модулей.
При алгоритмизации программы для ввода данных в ОЗУ необходимо разработать алгоритм ее макроуровня, а также алгоритмы работы всех программных модулей.
Разработка алгоритма макроуровня сводится к увязке во времени перечисленных программных модулей с помощью логической конструкции СЛЕДОВАНИЕ. Последовательность модулей в этой конструкции определяется логикой решения задачи. В общем случае модули целесообразно располагать в порядке появления обрабатываемых ими входных данных.
Построенная с учетом этого ГСА программы для ввода данных в ОЗУ приведена на рис. 6.37. Для повышения информативности ГСА на ней изображены входные и выходные данные для каждого программного исполнителя. Эти данные берутся из статической модели программы (см. рис. 6.27, 6.28) с учетом структуры данных (см. таблицу 6.4) и логики решения задачи. Недостатком приведенной ГСА является ее одноуровневый характер, не позволяющий получить четко структурированную программную документацию.
Для устранения этого недостатка необходимо перейти к двухуровневой ГСА, представленной на рис.6.38. В этом случае на макроуровне располагаются лишь вызовы программных исполнителей, а сами исполнители находятся на нижнем уровне управления.
При переходе к двухуровневому представлению алгоритма оператор "Подготовка" распадается на две части: "Системная подготовка" и "Функциональная подготовка" (FuncPrep).
В операторе "Системная подготовка" осуществляется инициализация сегментных регистров и дна стека, определяющая положение всех сегментов в памяти. Этот оператор должен выполняться на макроуровне, так как вызов модулей нижнего уровня при неинициализированном стеке невозможен.
Оператор "Функциональная подготовка" обеспечивает корректное исходное состояние наборов данных статической модели программы и может быть реализован как модуль нижнего уровня.
После разработки алгоритма макроуровня программы требуется разработать алгоритмы всех программных модулей нижнего уровня. Для этого прежде всего необходимо выбрать руководящую идею, которая может быть положена в основу работы рассматриваемого модуля, а затем реализовать ее.
