Проектирование программной части

      Комментарии к записи Проектирование программной части отключены

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

В соответствии с функционально модульной структурой процедура MAIN будет иметь вид:

MAIN()

{

ИНИЦИАЛИЗАЦИЯ СИСТЕМЫ();

РАЗРЕШЕНИЕ ОБЩЕГО ПРЕРЫВАНИЯ();

while (1)

{

ПРОВЕРКА ();

СБРОС WDT();

}

}

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

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

ИНИЦИАЛИЗАЦИЯ()

{

Установка портов на ввод/вывод и задание выходного вектора;

Настройка постоянного времени охранного таймера;

Настройка системы прерывания, разрешение отдельных прерываний;

}

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

Модульпроверкипроверяет состояние флага занятости индикатора. Если флаг не установлен, то запускается одна из процедур в выходном модуле. Эти процедуры содержатся в выходном модуле, такие как запись команды, запись данных и вывод информации на ЖКИ.

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

ПРОВЕРКА()

{

Если флаг занятости не установлен, то выполнить

{

ВЫХОДНОЙ (параметры);

}

}

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

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

ВХОДНОЙ()

{

Посылка команды

Вывод данных

}

Выходноймодуль устанавливает выходной вектор на выходной порт микроконтроллера. Данные сигналы управляют ЖКИ т.е. выводят информацию на индикатор.

ВЫХОДНОЙ

(параметры)

{

/* начало процедуры*/

Установка на порту выходного вектора;

}

/* возврат

Статьи к прочтению:

Объектно-ориентированное проектирование, часть 1 — как проектируются классы


Похожие статьи: