Какие языки используются для системного программирования в реальном времени?

Я не нашел никакой полезной информации о языках программирования для систем реального времени. Все, что я нашел, это системы реального времени и языки программирования: Ada 95, Java в реальном времени и C/POSIX в реальном времени ( некоторые здесь, в формате pdf), в которых, кажется, говорится о расширениях Java и C для систем реального времени (я не иметь книгу для чтения). Кроме того, книга была опубликована в 2001 году, и теперь эта информация может быть устаревшей.

Итак, я сомневаюсь, используются ли эти языки в приложениях реального мира или системы реального времени в реальном мире созданы на других языках, таких как DSL.

Если для вас верен второй вариант, каковы выдающиеся характеристики языка, который вы используете?

10 ответов

Решение

Спецификация Real-Time для Java теперь имеет несколько реализаций коммерческого уровня:

Эти продукты охватывают континуум от компиляции до нативного кода (Aonix) до J2ME (aicas, apogee) и до полной J2SE (Sun, IBM). Большинство, если не все, видели развертывания в небольших количествах критически важных для безопасности систем, но импульс набирает обороты. Примерами могут служить модернизация радара Eglin AFB для космического наблюдения и использование ВМС США RTSJ в эсминце DDG-1000/Zumwalt. Sun также заявляет о развертывании в области обработки финансовых транзакций.

Если вы заинтересованы в RTSJ, я предлагаю Питер Диббл Программирование на платформе в реальном времени или Параллельное и реальное программирование профессора Веллингса на Java.

В связи с этим также ведется работа по обеспечению критического для безопасности профиля для языка программирования Java, созданного как подмножество RTSJ. Также была сформирована группа экспертов для изучения Распределенного RTSJ DRTSJ, но работа зашла в тупик.

Я инженер по программному обеспечению авионики. Мне удалось поучаствовать в нескольких девелоперских проектах. В этих проектах я использовал следующие языки: C, C++ и Java в реальном времени.

С отлично. C++ не так уж и плох, но C/C++ требует строгих стандартов кодирования с точки зрения безопасности, таких как DO-178B.

Я думаю, что Java в реальном времени - это путь, но я пока не вижу много приложений для авионики.

Корейский реактивный тренажер T-50 будет иметь миссионерский компьютер с приложением RT Java, обслуживающим дисплеи HUD и MFD, и все критически важные функции.

Книга охватывает использование Ada 95, системы реального времени Java и расширений POSIX в реальном времени (запрограммировано на C). Ни один из них не является языком, специфичным для предметной области.

Ada 95 - это язык программирования, который широко использовался в конце 90-х годов и (AFAIK) до сих пор широко используется для программирования в реальном времени в оборонной и аэрокосмической промышленности. Существует по крайней мере один DSL, построенный поверх Ada - SparkAda - системы аннотаций, которые описывают характеристики системы для инструмента проверки программ.

Это интервью от 6 апреля 2006 г. показывает некоторые классы и изменения виртуальных машин, которые составляют систему реального времени Java. Здесь не упоминаются какие-либо доменные языковые расширения. Я не сталкивался с использованием Java в системах реального времени, но я не смотрел на те системы, где я ожидал бы найти его (я работаю в аэрокосмическом моделировании, где это C++, Fortran и иногда Ada для систем реального времени в цикле).

Realtime POSIX - это набор расширений возможностей операционной системы POSIX. Как расширения ОС, они не требуют ничего конкретного в языке. Тем не менее, я могу вспомнить один DSL на основе C для описания встроенных систем - SystemC - но я не знаю, используется ли он также для создания встроенных систем.

В книге не упоминается Matlab, который за последние несколько лет превратился из инструмента моделирования в систему разработки на основе моделей для систем реального времени. Matlab/Simulink - это, по сути, DSL для линейного программирования, конечных автоматов и алгоритмов. Matlab может генерировать C или HDL для систем реального времени и встроенных систем. Очень редко можно увидеть объявление о работе авионики, EW или другой оборонной промышленности в режиме реального времени, которое не требует некоторого опыта Matlab. (Я не работаю на Matlab, но трудно переоценить, насколько вездесущим он является в отрасли)

Приложения в режиме реального времени могут быть поданы практически на любом языке. Однако среда (операционная система, библиотеки времени выполнения и библиотеки времени выполнения) должна соответствовать ограничениям реального времени. В большинстве случаев реальное время означает, что всегда есть детерминированное время, когда что-то происходит. Детерминированное время обычно является очень низким значением времени в диапазоне микросекунд / миллисекунд.

Системы реального времени зависят исключительно от этого критерия, так как спецификации обычно говорят что-то вроде "Каждый х (период времени) (что-то сделать | проверить что-то)". Обычно это происходит, если система взаимодействует с внешними датчиками и управляет спасательными или опасными для жизни системами.

Я работал над автомобильной навигацией и информационно-развлекательной системой, разработанной в основном на C/C++, с операционной системой, настроенной специально для удовлетворения ограничений реального времени для обеспечения навигации в реальном времени и воспроизведения мультимедиа.

Но это не все для систем реального времени: обычно выбор алгоритмов во всей системе имеет детерминированные времена выполнения в соответствии с нотацией Big-O, в основном с использованием линейного или постоянного времени. Все остальное считается недетерминированным и, следовательно, не пригодным для систем реального времени.

Все системы реального времени, с которыми я работал, были преимущественно написаны на C с некоторыми битами на ассемблере, или написаны в основном на ассемблере с небольшими битами на C. (В зависимости от того, говорим ли мы о 90-х и более, или о 80-х, соответственно.) Однако некоторые системы реального времени, с которыми я работал, использовали - не совсем DSL - специальные доморощенные генераторы кода.

Ориентированный в реальном времени язык?

Что такое в реальном времени

Сначала мы должны определить, что означает в реальном времени.

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

Если вы создаете вещи для встраивания с помощью микроконтроллеров, таких как arduino, используемый язык будет ограничен аппаратными средствами, но с более сложными вещами, такими как Raspberry Pi, выбор языка очень широк.

Зернистость

Это зависит от того, что вы измеряете, если вы работаете с:

  • погодных температур, одного чтения каждые 10 минут может быть достаточно
  • люди ростом или весом, один или, может быть, четыре читают днем
  • состояние сервера, от 1 секунды для точной отладки до примерно 1 часа для тихого второстепенного вторичного сервера.
  • количество атомных столкновений: что-то лучше...

Событийное чтение

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

Ваш инструмент должен не запрашивать значения с устройства, но устройство должно отправлять значения вашему инструменту, когда они меняются.

Это можно сделать с помощью триггера аппаратного прерывания или с помощью протокола порта, такого как RS-232, который прослушивает какой-либо последовательный порт, например.

Мониторинг среды

Последнее, что следует предупредить, это то, как законный пользователь будет взаимодействовать с.

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

Если вы создаете веб-монитор, вам, возможно, придется иметь в виду, что клиент может быть старым монохромным экраном 800x600, с плохим интернет-соединением и небольшим процессором... Но в зависимости от конечной цели, если вы можете взаимодействовать с клиентами, вы может обеспечить надежное оборудование и надежные интернет-соединения. В любом случае вам нужно следить за потерей связи и событием задержки связи между сервером и клиентом. Есть в основном сторонние зависимости.

Какой язык программирования?

Оттуда выбор языка широк и явно зависит от

  • Ваши знания.
  • Запрошенная гранулярность (конечно, с использованием событий)
  • количество времени, которое вы должны построить инструмент (деньги;)
  • задержка, коллеги...
  • вид устройства
  • вид мониторинга
  • некоторые другие политические причины

Вы можете создать механизм мониторинга в реальном времени, используя только bash и sql, я видел сложные механизмы, которые были созданы только под postgresql... Я лично создал веб-монитор солнечной энергии, используя perl, mysql и javascript.

Я не могу поверить, что никто не упомянул язык программирования LabVIEW, который широко используется в системах безопасности в реальном времени. Он имеет обширные библиотеки и хорошо известные шаблоны проектирования для проектирования и реализации систем RT.

Также National Instruments производит различные аппаратные средства (cRIO, PXI и т. Д.), Которые предназначены для приложений реального времени.

Мы используем LabVIEW для гидроразрыва пласта (трещиноватости), который используется в критически безопасных средах.

Кстати, LabVIEW также используется не для RT приложений.

ПЛК выполняют лестничный и fbd-код, который на самом деле представляет собой dsl в реальном времени, в том смысле, что ваши параметры настолько ограничены, что его сложно программировать таким образом, что это приведет к непредсказуемой производительности во время выполнения.

По-настоящему целенаправленное применение языка C для программирования в реальном времени - и всех связанных с этим вопросов (таких как параллельное программирование) - предлагается моим Kickstarter http://www.kickstarter.com/projects/767046121/crawl-space-computing-with-connel Это называется "широкое программирование", и я занимаюсь этим большую часть своей жизни. Награды включают в себя библиотеку программного обеспечения и книгу, разработанную, чтобы быть полезной.

Компания , в которой я работаю с 2003 года, занимается разработкой и развертыванием платформы Scada/Mes. Первоначальная реализация началась в 1993 году, используется Modula2 на OS/2. Позже (1998) он был портирован на Ada95 и Windows. В настоящее время (2019) мы используем компилятор Ada от AdaCore. Наша система была портирована и была развернута на 32/64 Windows, HPUX, OpenVMS (и в последнее время даже на Raspberry). У нас есть несколько установок в центральной Европе (газовая промышленность, нефтеперерабатывающие заводы, заводы, электростанции). Мы считаем, что функции Ada придают нашей системе высокую степень надежности и предотвращают множество ошибок, которые легко могли бы возникнуть, если бы мы использовали такие языки, как C. Смотрите также мой блог https://www.ipesoft.com/en/blog/what-language-is-the-d2000-written

Другие вопросы по тегам