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