Густав Олссон, Джангуидо Пиани - Цифровые системы автоматизации и управления (1087169), страница 112
Текст из файла (страница 112)
В многозадачных систеляах программные модули вначале тестируются отдельно Во время такого тестирования должно быть проверено, что каждая строка программы выполняется хотя бы один раз. Иными словами, если программа содержит команды ветвления типа "Ы..сЬеп..е!зе", то тестовые данные должны обеспечить выполнение обеих ветвей. На этой фазе тестирования обычно полезны отладчики. Они позволяют непосредственно просматривать и изменять регистры процессора и области памяти при исполнении машинного кода, Отладчик вставляет в машинный код программы точки останова, в которых можно проверить состояние регистров и переменных и сравнить их со значениями, требуемыми логикой процесса.
Однако с ростом сложности операционных систем и расширением функциональности системных вызовов, код которых обычно неизвестен программисту, использование отладчика может оказаться мало полезным. Обычные пошаговые отладчики не позволяют полностью оценить взаимодействие между несколькими параллельными процессами.
Однако отладчики являются полезными и необходимыми средствами при разработке программ на ас семблере. Только после того как все модули были проверены по отдельности и все обнару женные ошибки исправлены, можно приступать к параллельному исполнению для отладки взаимодействия.
Многочисленные взаимосвязи программных модулей мо гут привести к ошибкам в системе, даже если отдельные модули работают правиль ильзе. Общая работа системы — время обработки прерываний, производительность пр" разной нагрузке — проверяется на основе тестовой спецификации. Особое вним имавяе следует обратить на функции, обеспечивающие надежность и безопасность сист' чстемы. Если система включает в себя обработку прерывании и исключений, то необх обходи мо проверить корректность соответствующей реакции. Имитация ошибочных чх сигуа' ций позволяет оценить их последствия для системы и ее поведение в этом слу учае.
Результаты тестов отдельных модулей и комплекснои отладки заносятся в Р п отекал испытаний, и на его основе вносятся необходимые исправления. Не следу ет забывать, что ошибки тем труднее исправляются, чем позже они были обнару жены. Расходы на тестирование — это инвестиции не только в качество системы, но и в ее общую экономическую эффективность, поскольку значительная часть расходов в тс чете чепце жизненного цикла системы уходит иа ее сопровождение, т. е. в конечном с на выявление и устранение ошибок.
Дальнейшее обсуждение надежности програлчлс ного обеспечения приведено в разделе 12.3А. 1О.7. Языки программирования и операционные системы реального времени 10 7.1. Требования к языкам и операционным системам реального времени Программирование в реальном времени требует специальных средств, которые не сегда встречаются в обычных языках последовательного программирования. Язык кяи операционная система для программирования в реальном времени должны преясставлять следующие возможности: — описание параллельных процессов; — переключение процессов на основе динамических приоритетов, которые могут изменяться, в том числе и прикладными процессами; — синхронизация процессов; — обмен данными между процессами; — функции, связанные с часами и таймером, абсолютное и относительное время ожидания; — прямой доступ к внешнилч аппаратным портам; — обработка прерываний; — обработка исключений.
Немногие языки обеспечивают все эти возможности. Большинство имеет лишь часть из них, хотя для определенных приложений этого оказывается достаточно. Некогорые компании разработали специальные языки для поддержки своих собственных шцаратных средств. Эти языки не претендуют на универсальность и ориентированы скорее на конкретные ЭВМ и их интерфейсы. Обычно они базируются на сушествуюячих языках — ЕОКТКАЫ, ВАЗ1С вЂ” с расширениями, включающими функции реаль- кого времени, о чем свидетельствуют их названия типа "Ргосезз ВА51С" и "Кеа1-11ше гОКТВАХ".
Некоторые языки не поддерживают программирования в реальном вреиени в строгом смысле, но они легко расширяются, например С и Сел. В 1070-е годы широкую поддержку получила концепция единого переносимого многщелевого языка программирования. В результате был разработан язык АОА. Его главНая ая идея состоит в том, что среда программирования, т. е, язык, должна быть полностью от ел делена от аппаратных средств.
Программист не должен сталкиваться с деталями мацкин . н" ого уровня, а работать только в терминах абстрактных структур и типов данных. Опыт показал нереалистичность такого подхода. универсальные, сильно типизи- Р ванпьче языки программирования гарантируют определенный уровень нэдежносРован тип "Рограммы, но в то же время ограничивают гибкость. Быстрое развитие технических с средств предъявляет новые требования, которые не могли быть предусмотрены в сУШе Уще гвуюпчих язь|ках, и многие рограммисть! чувствуют ограничения, используя яес амые современные языки программирования.
цена надежности языка — сложяост, ть и громоздкость, а геиерируелчгяи при этом компилятором код — избыточен и чалоэффективен. Открьггь'й язь'к типа С, осиованый ца ограниченном количестве оных идей, обладает б ю и предоставляет опытному программистч5 у олыце возможносте .
й Несуществуетнаи„ лучшего языка — для каждого приложеяи я и среды необходимо о подбирать свои с е с р яства и при этом учитывать квалификааботчиков. яисо и предпочтения разраб 456 457 Глава 10, Программирование систем реального в меьи !0 . 0 7 Языки программирования и операционные системы 10.7.2. Язык программирования АОА Первым полным языком программирования в реальном времени является Л!) В середине 1970-х годов Министерство обороны СШАдля сокращения расходов и р работку и сопровождение своих систем управления реального времени приняло ние ввести единый язык программирования в качестве альтернативы сотням исп~л павшихся тогда языков. В 1979 году министерство одобрило предложения, выдан„ французской компанией Нопеуч е!1 Вц!1.
Язык назван в честь Августы Ады Байрон фини Лавлейс (Ац8цьча Лг!а Вугоп, Соцпгезз о1Боче1асе, 1815 — 1852), которую мож„ считать первым программистом в истории — она писала программы для аналитическ „" машины (механического компьютера, который никогда не был построен), спроектир . ванной английским изобретателем Чарльзом Бэббиджем (СЬаг!ез ВаЬЬайе). Язык АОЛ является полной средой разработки программ с текстовым редакторои отладочными средствами, системой управлениями библиотеками и т, д Специфика. ции АОА закреплены американским стандартом А)з18!/МП.-ЗТО-1815А и включают средства контроля соответствия этому стандарту. Не допускаются диалекты языков для сертификации компилятор должен правильна выполнить все эталонные тесты Структура языка ЛОА похожа на структуру языка Разов!, но его возможности значительно шире, в особенности применительно к системам реального времени.
Процессу в АОА соответствует залача, которая выполняет независимо от других залач на выделенном виртуальном процессоре, т. е. параллельно с другими задачами. Задачи могут быть связаны с отдельными прерываниями и исключениями и работать как их обработчики. Новым понятием, введенным в ЛОА, является пакет — модуль со своими собственными описаниями типов данных, переменных и подпрограмм, в котором явно указано, какие из программ и переменных доступны извне.
Пакегы могут компилироваться отдельно с последующим объелинением в один исполняемый модуль. Это средств лд р о по е живает модульную разработку программ и создание прикладных библиотек. В на к. В начале 1990-х гадов язык АОА был пополнен новыми функциями для объектно-ориентированного пр' |раммирования и программирования в реальном времени. вня по ерживаетсх Машинно-ориентированное программирование низкого уровня лд р ' АОА не достаточно эффективно — это следствие постулата, чт то все задачи можно решить средствами высокого уровня.
Например, для операций ввода/вывода в используются прикладные пакеты с заранее определенн фу ыми ф нкциями для управ ления аппаратными интерфейсами и доступа к внешним данным. т уд Основным недостатком АОА является его сложност, р' ь, кото ая делает язык тру ным для изучения и применения. Сугцествуюшие ком р компилятооы являются дорогост чих . До сих пор АОА не полу ягцими продуктами и требуют мощных процессоров.
До ожидавшейся популярности, и сомнительно, что это когд — у а-ниб дь произойлет. 10.7.3. Языки С и С++ ств, кото Язык программирования С, несмотря ' у на ото тствие в нем многих срелс п о аммировавнж читают необходимыми для хорошего языка программиров ' рые теоретики считают н н . ее в емя Этот яз" пользуется ольшим успех . б . м успехом начиная с 1980-х годов по настоящее время. вности, в час стал популярным для всех пр, всех приложений, требую ших высокой эффективности, о ов использ.
м, реального времени. 2!ля обычных микропроцессоров, испо. емых в системах упр ах правления, имеются С-компиляторы и системы разработки м оизводителей. В промышленности существует явная тенленция к широкому прицро вен нению языка С и операционной системы ОЫ!Х, которая сама написана на С, по„льку приложения, написанные на С, машинно-независимы и требуют очень негхо. „ьших усилий для адаптации к работе в различной аппаратной среде. рол философией С является разбиение программ на функции. С вЂ” слаботипизировм вэый язык и позволяет программисту делать почти все вплоть до манипуляции с гистрами и битами. Такая свобода делает язык небезопасным, поскольку компилягор ве может проверить, являются ли подозрительные операции умышленными или „ет Небольшое количество заранее определенных функций и типов данных делает „рограммы легко переносимыми между разными системами. С поддерживает как хооюнй, структурированный, так и плохой стиль программирования, оставляя ответгтзенность за качество разработки на программисте.