Чтобы включить проект C++, я упаковываю источник в блок S-Function, который совместим с Simulink® Desktop Real-Time™ цель генерации кода, sldrt.tlc
. Проект C++ использует интерфейсы C++ 11 Standard Шаблона Library (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. Затем запустите модель. Требования в реальном времени не могут быть соблюдены, но ошибки в реальном времени сообщаются по мере их возникновения.