Чтобы включать проект C++, я переношу источник в Блок s-function, который совместим с целью генерации кода Simulink® Desktop Real-Time™, sldrt.tlc
. Проект C++ использует C++ 11 интерфейсов Стандартной библиотеки шаблонов (STL), таких как std::vector
, std::stack
и std::complex
. Я могу успешно скомпилировать проект в режиме normal mode. Но, когда я компилирую в режиме external mode, я получаю ошибки компиляции, такие как:
<complex> file not found <vector> file not found
Компилятор генерирует эти ошибки, потому что стандартная библиотека шаблонов C++ не совместима с кодом в реальном времени.
В режиме реального времени код, существует требование, чтобы всегда закончить один временной шаг вовремя, прежде чем следующий будет должен запуститься. Это требование производит детерминированное временем поведение для кода в реальном времени и производит более или менее зафиксированное время выполнения.
Для сравнения стандартная библиотека шаблонов C++ часто использует функции, которые не детерминированы временем. Самыми известными примерами является динамическое выделение памяти и исключения. В то время как динамическое выделение памяти (с некоторыми ограничениями) поддерживаемое ядром реального времени детерминированным способом в реальном времени, исключения не. Так, не возможно использовать код, который может выдать исключения.
Эта проблема заставляет большинство заголовков STL быть недоступным с целью генерации кода Simulink Desktop Real-Time. Эти интерфейсы выдают исключения. Вы не можете запустить код, который использует STL в ядре реального времени.
Чтобы устранить ошибки компилятора, измените свой проект не использовать стандартную библиотеку шаблонов C++.
Если вы не можете изменить свой проект не использовать стандартную библиотеку шаблонов C++, можно использовать цель генерации кода Simulink Desktop Real-Time в режиме normal mode.
Для режима normal mode скомпилируйте S-функцию, как вы были бы для Simulink. Затем запустите модель. Требования в реальном времени не могут быть осуществлены, но о промахах в реальном времени сообщают, как они происходят.