- •1 Введение во встраиваемые вычислительные системы
- •1.1 Определения, особенности, классификация
- •1.1.6.1 Уровень предприятия (1)
- •1.1.6.2 Уровни объекта (2) и подсистемы (3)
- •1.1.6.3 Уровень функциональных узлов (4)
- •1.1.6.4 Уровень оборудования функциональных узлов (5)
- •1.1.6.4.1 Устройства ввода-вывода
- •1.1.6.4.2 Устройство сопряжения с объектом
- •1.2 Механизмы реального времени
- •1.2.4.1 Классификация прерываний
- •1.2.4.2 Функции системы прерываний и их реализация
- •1.2.5.1 Основные характеристики pcf8583
- •1.2.5.2 Описание
- •1.2.5.3 Режимы работы часов
- •1.2.5.4 Регистры-счетчики
- •1.2.5.5 Будильник
- •1.2.5.6 Регистры сигнализации
- •1.2.5.7 Таймер
- •1.2.5.8 Режим счетчика событий
- •1.2.5.9 Вывод прерывания int
- •2 Технические средства встраиваемых систем
- •2.1 Элементная база микропроцессорной техники для
- •2.2 Модульный принцип организации процессора ввс
- •2.2.4.1 Энергонезависимая память e2prom: историческая справка
- •2.2.4.2 Основные характеристики eeprom at24Cxx
- •2.2.4.3 Описание
- •2.2.4.4 Организация памяти
- •2.2.4.5 Адресация модулей eeprom
- •2.2.4.6 Операция записи
- •2.2.4.7 Операция чтения
- •2.2.5.1 Однонаправленные порты
- •2.2.5.2 Двунаправленные порты и порты с альтернативной функцией
- •2.2.6.1 Программируемые таймеры в микроконтроллере с ядром Intel
- •2.2.6.2 Модули таймеров-счетчиков со схемами входного захвата,
- •2.2.7.1 Классификация ацп
- •2.2.9.1 Контроллер последовательного интерфейса в
- •2.2.10 Подсистема синхронизации
- •2.2.11 Механизмы начальной инициализации встроенной памяти
- •2.2.11.1 Внешнее программирование встроенного пзу
- •2.3 Сетевые интерфейсы встраиваемых систем
- •2.3.1.1 Концепция шины I²c
- •2.3.1.2 Принцип работы шины I²c
- •2.3.1.3 Сигналы старт и стоп
- •2.3.1.4 Подтверждение
- •2.3.1.5 Синхронизация
- •2.3.1.6 Форматы обмена данными по шине I²c (7-битный адрес)
- •2.3.1.7 Арбитраж
- •2.3.1.8 Достоинства шины I²c
- •2.3.2.1 Согласование и конфигурация линии связи
- •2.3.2.2 Защитное смещение
- •2.3.2.3 Исключение приема при передаче в полудуплексном режиме
- •2.3.4.1 Протоколы реального времени
- •2.3.4.2 Резервирование каналов и кольцевая топология
- •2.3.4.3 Отличия от обычного Ethernet
- •2.3.6.1 Преимущества
- •2.3.6.2 Преимущества plc по сравнению с Wi-Fi
- •2.3.6.3 Недостатки
- •2.3.9.1 Физический уровень
- •2.3.9.2 Контроллер шины
- •2.3.9.3 Оконечные устройства
- •2.3.9.4 Монитор канала
- •3 Программное обеспечение и инструментальные
- •3.1 Особенности программного обеспечения ввс
- •3.1.4.1 Особенности плк
- •3.1.4.2 Варианты построения систем на базе плк
- •3.1.4.3 Особенности программирования плк
- •3.1.4.4 Варианты реализации плк
- •3.1.4.5 Цикл плк
- •3.1.4.6 Области применения плк
- •3.1.4.7 Сравнение с микроконтроллерами
- •3.2 Языки программирования
- •3.2.8.1 Удобочитаемость
- •3.2.8.2 Лёгкость создания программ
- •3.2.8.3 Надёжность
- •3.2.10 Краткий обзор языков, используемых при проектировании
- •3.2.10.1 Язык программирования Си
- •3.2.10.3 Платформа Java
- •3.2.10.4 Платформа .Net
- •3.2.10.5 Язык программирования ada
- •3.2.10.6 Язык программирования Esterel
- •3.2.10.7 Язык программирования Lustre
- •3.3 Инструментальные средства отладки и тестирования
- •Ieee 1149.1 jtag - механизм граничного сканирования
- •3.3.3.1 Реализация jtag-инструментария
- •3.3.4.1 Цели и задачи профилировки
- •3.3.4.2 Общее время исполнения
- •3.3.4.3 Удельное время выполнения
- •3.3.4.4 Определение количества вызовов
- •3.3.4.5 Определение степени покрытия
- •3.3.5.1 Обеспечение корректности программного кода: обзор
- •3.4 Разработка программного продукта
- •3.4.2.1 Сложность проектирования и разработчики- одиночки
- •3.4.2.2 Оценка времени проектирования
- •3.4.2.3 Использование новых технологий
- •3.4.4.1 Безопасность и перемены
- •3.4.4.6 Играй в защите
- •3.4.4.7 Сбор метрических данных
- •3.4.4.8 Что дает давление сверху
- •3.4.4.9 Сердитый начальник
- •3.4.4.10 Туманные спецификации
- •3.4.4.11 Конфликт
- •3.4.4.12 Кто такой катализатор проекта
- •3.4.4.13 Человеку свойственно ошибаться
- •3.4.4.14 О персонале
- •3.4.4.15 Проблемы социологии
- •3.4.4.16 О патологической политике (еще раз)
- •3.4.4.17 Злоба и скупость
- •3.4.4.18 Основы здравого смысла
- •4 Устройство современного контроллера на примере
- •4.1 Назначение стенда
- •4.2 Состав стенда
- •4.3 Разъемы стенда и назначение выводов
- •4.4 Обзор компонентов принципиальной электрической
- •4.4.3.1 Матричная клавиатура
- •4.4.3.2 Жидкокристаллический индикатор
- •4.4.3.3 Светодиодные индикаторы
- •4.4.3.4 Звукоизлучатель
- •4.4.3.5 Дискретные входы-выходы
- •4.4.10 Фильтрующие емкости
- •4.5 Микроконтроллер aDuC812
- •4.6 Расширитель портов ввода-вывода на базе плис
- •4.6.1 Регистр клавиатуры kb
- •4.6.2 Регистр шины данных жки data_ind
- •4.6.3 Регистр данных параллельного порта ext_lo
- •4.6.4 Регистр данных параллельного порта ext_hi
- •4.6.5 Регистр управления ena
- •4.6.6 Регистр управления жки c_ind
- •4.6.7 Регистр управления светодиодами sv
- •4.6.8 Логическая схема плис: доступ к периферийным устройствам
- •4.6.9 Жидкокристаллический индикатор
- •4.6.9.1 Историческая справка
- •4.6.9.2 Подключение жки
- •4.6.9.3 Контроллер жки
- •4.6.9.4 Память данных жки (ddram)
- •4.6.9.9 Таблица команд контроллера жки
- •4.6.9.10 Операции чтения и записи команд/данных
- •4.7 Внешняя память программ и данных
- •5 Инструментальные средства для работы со стендом
- •5.1 Программирование стенда sdk-1.1
- •5.2 Компилятор sdcc
- •5.2.10 Использование меток
- •5.2.11 Директива __naked
- •5.2.12 Формат Intel hex
- •5.3 Инструментальная система m3p
- •5.4 Утилита make
- •5.5 Система контроля версий
- •6 Примеры программирования стенда sdk-1.1
- •6.1 Приступаем к работе
- •6.2 Программирование светодиодных индикаторов
- •6.3 Программирование последовательного канала
- •6.4 Программирование таймера
- •6.5 Программирование жки
1.2 Механизмы реального времени
1.2.1
Таймер
Таймер позволяет производить отсчет временных интервалов заданной
продолжительности. Принцип действия таймера основан на двоичном счетчике,
с возможностью предварительной записи исходного значения. После каждого
20
такта синхросигнала счетчик прибавляет или отнимает единицу от имеющегося
у него значения. При достижении нуля (то есть при переполнении), счетчик
вырабатывает активный уровень на выходе. Как правило, выходной сигнал
таймера заводят на вход запроса прерывания микропроцессора или контроллера
прерываний.
В большинстве современных встроенных систем таймеры используются в
качестве основы для организации системы разделения времени на базе
переключателя задач. В данном случае таймер используется в паре с
механизмом прерываний [5].
1.2.2
Устройство захвата-сравнения
Устройство захвата-сравнения предназначено для измерения периодов и
длительностей импульсов, скважности, а также для генерации импульсов. С
помощью этого модуля можно получить широтно-импульсную (ШИМ) и
фазовую модуляцию (ФМ).
1.2.3
Сторожевой таймер
Допустим, в нашей системе есть некий процесс, выполняющий какую-либо
полезную задачу. Назовем его прикладным или наблюдаемым процессом. Если
процесс
выполняет
важную
целевую
функцию,
то
прекращение
его
деятельности может привести к остановке работы всей встроенной системы, то
есть к сбою. Если не принять особых мер по обнаружению таких ситуаций,
встроенная система может работать некорректно в течении достаточно долгого
времени. Для вывода систем из сбойного состояния и приведения её в
нормальный режим функционирования обычно используют сторожевой таймер.
Таким образом, сторожевой таймер является механизмом защиты системы
от сбоев.
Рассмотрим работу сторожевого таймера подробнее. В работе участвуют
три процесса: наблюдаемый прикладной процесс, процесс сторожевого таймера
и служебный процесс, реализующий механизм защиты системы от аварийных
ситуаций. Суть механизма сторожевого таймера состоит в проверке критерия,
по которому можно определить, что наблюдаемый процесс работает
нормально. Если сторожевой таймер обнаруживает, что с наблюдаемым
процессом все в порядке, то ничего не происходит. Если сторожевой таймер
определил, что с наблюдаемым процессом что-то не так, происходит передача
информации системе разрешения аварийных ситуаций, которая, в свою
очередь, принимает решение о дальнейшей судьбе наблюдаемого процесса.
В самом примитивном варианте в качестве сторожевого таймера выступает
обычный
вычитающий
счетчик.
Во
время
инициализации
в
счетчик
записывается какое-либо значение. Если в процессе работы в счетчик
эпизодически вносится новая константа, то ничего не происходит. Если же
прикладной процесс не успевает записать константу, и счетчик успевает
21
досчитать до нуля, вырабатывается сигнал аппаратного рестарта и процессор
перезапускается. Естественно, простой вариант реализации сторожевого
таймера не является 100% гарантией от выхода системы из сбойного состояния.
Рассмотрим типичную ошибку, допускаемую программистами при
использовании
простого
сторожевого
таймера.
Для
того,
чтобы
контролируемый
процесс
прекратил
работу,
достаточно
вставить
код
обновления счетчика сторожевого таймера внутрь цикла проверки, который
будет всегда давать ложное значение из-за какой-либо ошибки (в аппаратуре
или программе).
while( device_ready() == 0 ) reset_watchdog_timer();
Если функция device_ready всегда будет возвращать ноль, то мы
бесконечное время будем сбрасывать сторожевой таймер, и система будет
всегда находиться в состоянии сбоя.
Нужно заметить, что в большинстве микроконтроллеров реализована
самая простая схема работы сторожевого таймера. Для её нормальной работы
нужна дополнительная, сложная программная обработка.
Ещё одним неудобством простой схемы сторожевого таймера является
выработка аппаратного сигнала рестарта (RESET). В большинстве случаев
гораздо корректнее производить повторную инициализацию или рестарт одной
или нескольких взаимосвязанных частей системы, а полный горячий рестарт
осуществлять только при каких-либо фатальных сбоях.
1.2.4
Система прерываний
Прерывание в классической трактовке – прекращение выполнения
текущей команды или последовательности команд для обработки некоторого
события обработчиком прерывания, с последующим возвратом к выполнению
прерванной программы.
Прерывание
можно
определить
как
механизм
межпроцессного
взаимодействия, включающий в себя механизмы передачи данных (тип
прерывания) и управления (пуск/останов текущего процесса).
Система
прерываний
является
неотъемлемой
частью
любой
вычислительной системы и предназначена для обеспечения быстрой реакции
процессора на ряд ситуаций, требующих его внимания, которое может
возникать как в самом процессоре, так и за его пределами.
Прерывания следует рассматривать не только и не столько как реакцию
процессора на аномальные ситуации, а как естественный процесс, с помощью
которого реализуется поддержка большинства необходимых механизмов, таких
как виртуальная память, ввод/вывод и т. п. По образному выражению Питера
Нортона: "Прерывание – это движущая сила компьютера".
22
Система прерываний представляет собой комплекс аппаратных и
программных средств. Аппаратные средства системы прерываний обычно
называются
блоком
или
контроллером
прерываний.
В
ПК
это
PIC
(Programmable Interrupt Controller), т.е. отдельная микросхема 8259A. В
некоторых случаях контроллер прерываний интегрируется в кристалл
микропроцессора. Управление контроллером прерываний осуществляется через
регистры.
Каждому
прерыванию
можно
задать
приоритет,
численно
определяющий важность события [21]. Программные средства систем
прерываний представляют собой специальные программы – обработчики
прерываний
(interrupt handler).
Как
правило,
адреса
обработчиков
располагаются в специальной таблице, так называемой таблице векторов
прерываний.
Назначение системы прерывания – реагировать на определенные события
путем прерывания работы
процессора по
выполнению
программы
и
переключения процессора на выполнение другой программы, обслуживающей
соответствующую ситуацию. В момент возникновения определенного события
(причины) формируется сигнал прерывания, который поступает в процессор и
инициирует специальную операцию – операцию прерывания, обеспечивающую
прерывание одной программы и переключение процессора на выполнение
другой программы.