Диагностируйте ошибки компиляции стандартной библиотеки шаблонов (STL) C++ для приложения реального времени

Чтобы включать проект C++, я переношу источник в Блок s-function, который совместим с Simulink® Цель генерации кода Desktop Real-Time™, sldrt.tlc. Проект C++ использует C++ 11 интерфейсов Стандартной библиотеки шаблонов (STL), таких как std::vector, std::stack, и std::complex. Я могу успешно скомпилировать проект в режиме Connected IO. Но, когда я компилирую в режиме Run in Kernel, я получаю ошибки компиляции, такие как:

<complex> file not found
<vector> file not found

Что означает эта проблема

Компилятор генерирует эти ошибки, потому что стандартная библиотека шаблонов C++ не совместима с кодом в реальном времени.

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

Для сравнения стандартная библиотека шаблонов C++ часто использует функции, которые не детерминированы временем. Самыми известными примерами является динамическое выделение памяти и исключения. В то время как динамическое выделение памяти (с некоторыми ограничениями) поддерживаемое ядром реального времени детерминированным способом в реальном времени, исключения не. Так, не возможно использовать код, который может выдать исключения.

Эта проблема заставляет большинство заголовков STL быть недоступным с целью генерации кода Simulink Desktop Real-Time. Эти интерфейсы выдают исключения. Вы не можете запустить код, который использует STL в ядре реального времени.

Попробуйте это обходное решение

Чтобы устранить ошибки компилятора, измените свой проект не использовать стандартную библиотеку шаблонов C++.

Если вы не можете изменить свой проект не использовать стандартную библиотеку шаблонов C++, можно использовать цель генерации кода Simulink Desktop Real-Time в режиме Connected IO.

Для режима Connected IO скомпилируйте S-функцию, как вы были бы для Simulink. Затем запустите модель. Требования в реальном времени не могут быть осуществлены, но о промахах в реальном времени сообщают, как они происходят.