- •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 Программирование жки
3.3.5.1 Обеспечение корректности программного кода: обзор
существующих решений
Существуют различные подходы к обеспечению корректности кода
приложений. Перечислим наиболее распространенные из них: тестирование с
помощью юнит-тестов, динамический анализ кода (во время работы
приложения), статический анализ кода (анализ исходных текстов). Нельзя
сказать, что какой-то один вариант тестирования лучше других – все эти
подходы обеспечивают различные аспекты качества приложений.
Юнит-тесты предназначены для быстрой проверки небольших участков
кода, например, отдельных функций и классов. Их особенность в том, что эти
тесты выполняются быстро и допускают частый запуск. Из этого вытекают два
нюанса использования такой технологии. Во-первых, эти тесты должны быть
написаны. Во-вторых, тестирование выделения больших объемов памяти
(например, более двух гигабайт) занимает значительное время, поэтому
нецелесообразно, так как юнит-тесты должны отрабатываться быстро.
Динамические анализаторы кода (лучший представитель – это Compuware
BoundsChecker) предназначены для обнаружения ошибок в приложении во
время выполнения программы. Из этого принципа работы и вытекает основной
недостаток динамического анализатора. Для того чтобы убедиться в
корректности программы, необходимо выполнить все возможные ветки кода.
Для реальной программы это может быть затруднительно. Но это не значит, что
динамический анализ кода не нужен. Такой анализ позволяет обнаружить
ошибки, которые зависят от действий пользователя и не могут быть
определены по коду приложения.
Статические анализаторы кода (как, например, Gimpel Software PC-lint и
Parasoft C++test) предназначены для комплексного обеспечения качества кода и
содержат несколько сотен анализируемых правил. В них также есть некоторые
из правил, анализирующих корректность 64-битных приложений. Однако,
поскольку это анализаторы кода общего назначения, то их использование для
164
обеспечения качества 64-битных приложений не всегда удобно. Это
объясняется, прежде всего, тем, что они не предназначены именно для этой
цели. Другим серьезным недостатком является их ориентированность на
модель данных, используемую в Unix-системах (LP64). В то время как модель
данных, используемая в Windows-системах (LLP64), существенно отличается от
нее. Поэтому применение этих статических анализаторов для проверки 64-
битных
Windows-приложений
возможно
только
после
неочевидной
дополнительной настройки.
Некоторым дополнительным уровнем проверки кода можно считать
наличие
в
компиляторах
специальной
диагностики
потенциально
некорректного кода (например, ключ /Wp64 в компиляторе Microsoft Visual
C++). Однако этот ключ позволяет отследить лишь наиболее некорректные
конструкции, в то время как многие из также опасных операций он пропускает.
3.3.6
Инструментальные средства отладки ОС РВ eCos
В ОС РВ eCos для отладки программного обеспечения используется
Redboot.
Redboot (акроним от «Red Hat Embedded Debug and Bootstrap») – это
приложение с открытым исходным кодом, которое использует слой абстракции
оборудования (HAL) операционной системы реального времени eCos для
загрузки программного обеспечения или прошивки (firmware) во встроенных
вычислительных системах. Redboot предоставляется под GPL-совместимой
лицензией eCos License.
Redboot предоставляет широкий набор инструментов для загрузки и
исполнения программ в целевых встроенных системах, в том числе Embedded
Linux и eCos приложений, через последовательный канал или Ethernet
соединение, а также инструменты для манипулирования параметрами целевой
системы. Redboot также обеспечивает простую файловую систему для модулей
флэш-памяти, которая может быть использована для загрузки исполнимых
образов. Он может быть использован при разработке продукции (для
поддержки отладки), а также для использования в конечной продукции (для
загрузки приложений по сети или с флэш-памяти).
Возможности Redboot:
Поддержка загрузочных скриптов;
Простой интерфейс командной
строки
для
управления
и
конфигурирования Redboot, доступный через последовательный канал
или Ethernet соединение по протоколу telnet;
Встроенные заглушки GDB для соединения с отладчиком на хост-
машине через последовательный или сетевой Ethernet интерфейс
(ограничивается локальной сетью) для отладки приложений на целевой
встроенной системе;
165
Атрибутная конфигурация – пользовательский контроль и возможность
изменения таких аспектов, как системное время и дата (если
используется), статический IP адрес и т.д.;
Конфигурируемый и расширяемый, специально для адаптации под
целевую платформу;
Поддержка загрузки по сети, включая установку и загрузку через
BOOTP, DHCP и TFTP;
Поддержка загрузки программ через последовательный интерфейс
посредством протоколов XModem и YModem;
Самотестирование при запуске.
Redboot может быть использован в качестве общей системы отладки и
контроля загрузки программного обеспечения для любых встроенных систем и
операционных систем. Например, с соответствующими дополнениями Redboot
может заменить широко используемые программы BIOS персональных
компьютеров.