exponenta event banner

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

Чтобы включить проект 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. Затем запустите модель. Требования к реальному времени не могут быть выполнены, но промахи в реальном времени сообщаются по мере их возникновения.