Во-первых, я хотел бы отметить, что я новичок в системном программировании в реальном времени, поэтому я не уверен, что мои вопросы верны. Извините за это, но мне нужна помощь
Короче вопрос: как внедрить жесткое программное обеспечение в реальном времени, чтобы быть уверенным, что оно соответствует жестким срокам? Нужно использовать некоторые функции QNX? Или достаточно написать его для linux, портировать на QNX и по умолчанию он будет в реальном времени?
Полный вопрос: Мы реализовали несколько сложных кроссплатформенных многопроцессорных программ с межпроцессным взаимодействием для Linux, Windows, Android и QNX. Язык программирования - C ++, мы используем Boost и другие библиотеки. Наше программное обеспечение делает свою работу хорошо и быстро, но все еще является прототипом. Для производственных целей мы должны делать это в режиме реального времени. Некоторые из наших функций должны быть в режиме реального времени и очень надежными, потому что они очень важны, и от них может зависеть безопасность людей, использующих наше программное обеспечение. Они работают довольно быстро - до сотен миллисекунд. Но я не уверен, что наша система действительно работает в режиме реального времени из-за этого факта (я прав?).
Поэтому возникает главный вопрос: как изменить наше программное обеспечение в режиме реального времени? Я много гуглил, но до сих пор не знаю, как это сделать.
Некоторая дополнительная информация о наших платформах: Linux и Windows в настоящее время мы используем только для целей тестирования. Android - мы до сих пор не решили, нужен ли он нам. QNX - наша целевая ОС для производства. Я предполагаю, что ответом на мой следующий вопрос будет «НЕТ» :) Но возможно ли вообще внедрить кроссплатформенное программное обеспечение реального времени (для ОС реального времени (RTOS), а также для ОС общего назначения (GPOS))?
Возможно, нам нужно приложить усилия для реализации всех функций реального времени только для QNX? Но я до сих пор не понимаю, как это сделать. Может ли кто-нибудь пролить свет на этот вопрос?
Ответы:
Быстрый не означает в реальном времени, а в реальном времени не означает быстрый.
В реальном времени означает, что дата, когда результат доставлен, так же важен, как и его ценность. Другими словами, если результат имеет правильное значение, но доставлен слишком рано или слишком поздно, тогда общий результат неверен.
Например, подумайте о видеоплеере. Если видеокадры не отображаются с правильной скоростью, пользователи не будут удовлетворены. Хуже, если изображение и звук не синхронизированы.
Этот пример показывает, что некоторые приложения реального времени могут быть реализованы в современных ОС общего назначения.
Но существует различие между жестким в реальном времени и мягким в реальном времени в отношении последствий пропущенного срока: в мягких системах в реальном времени это просто раздражение или ухудшенный сервис (представьте, что замерзшие изображения в течение нескольких секунд пример видеоплеера), хотя это (потенциально катастрофический) сбой в системе реального времени, например, на атомной электростанции.
источник
Как уже сказал @mouviciel , в режиме реального времени и быстрый - это два независимых свойства, хотя многие крайние сроки в реальном времени подразумевают необходимость относительно быстрого отклика.
При написании программного обеспечения для реального времени наиболее важным свойством рядом с правильным ответом является то, что вы можете точно предсказать, насколько быстро будет получен ответ. Для сложных функций реального времени вы даже должны быть в состоянии гарантировать, что крайний срок будет соблюден при всех возможных условиях, за исключением полного сбоя питания.
Типичные источники непредсказуемости можно найти в
Я не говорю, что вы должны избегать этих областей (как вы, скорее всего, не можете), но вы должны знать, как они могут повлиять на легкость, с которой вы можете предсказать, что вы будете соблюдать сроки в реальном времени для соответствующих функций.
источник
Я полагаю , что два-предложение объяснение реального времени является то , что система реального времени предназначена для понимания и управления в наихудшем случае времени отклика от входов к выходам изменяющихся меняется.
Это требует анализа, охватывающего всю систему. Допустим, у вас есть тривиальная система, состоящая из клавиатуры USB и усилителя тормозов. Какую отзывчивость вы можете достичь с помощью этой системы? Возможно, вам придется рассмотреть:
В такой среде, как правило, особое внимание уделяется надежности, например, стандартам MISRA C.
источник
avoiding use of garbage collection
- Это должно бытьavoiding use of non-deterministic memory management
. Сборка мусора может выполняться в режиме реального времени, и ручное управление памятью не обязательно является детерминированным (см. Типичнуюmalloc
реализацию для C).