Выберите и сконфигурируйте компилятор C++ или C

Процесс сборки требует поддерживаемого компилятора. Компилятор, в этом контексте, относится к среде разработки, содержащей компоновщика, и сделайте утилиту и компилятор высокоуровневого языка. Для получения дополнительной информации на поддерживаемых версиях компилятора, см.:

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

Процесс сборки также требует выбора make-файла шаблона или набора инструментальных средств. Make-файл набора инструментальных средств или шаблона определяет, какой компилятор запускается, во время сделать фазы сборки. Для получения дополнительной информации смотрите, Выбирают Build Approach и Configure Build Process (Simulink Coder)

Чтобы определить, какие make-файлы шаблонов доступны для вашего компилятора и системного конечного файла, смотрите, Сравнивают Системную Поддержку Конечного файла Через продукты (Simulink Coder).

И для сгенерированных файлов и для предоставленных пользователями файлов, расширения файла, .c или .cpp, определяет, использует ли процесс сборки C или компилятор C++. Если расширением файла является .c, процесс сборки использует компилятор C, чтобы скомпилировать файл, и символы используют соглашение рычажного устройства C. Если расширением файла является .cpp, процесс сборки использует компилятор C++, чтобы скомпилировать файл, и символы используют спецификацию рычажного устройства C++.

Податливость стандартов языка

Генератор кода производит код, который совместим со следующими стандартами:

ЯзыкПоддерживаемый стандарт
CISO®/IEC 9899:1990, также известный как C89/C90
C++ISO/IEC 14882:2003

Кодом, который генератор кода производит из этих источников, является совместимый ANSI® C/C ++:

  • Simulink® встроенный алгоритмический код блока

  • Сгенерированный код уровня системы (ID задачи [TID] проверки, управление, функции, и так далее)

  • Код от другого blocksets, включая продукт Fixed-Point Designer™ и продукт Communications Toolbox™

  • Код из других генераторов кода, таких как функции MATLAB®

Кроме того, генератор кода может включить код от:

  • Конечные файлы встраиваемой системы (например, запустите код, блоки драйвера устройства),

  • Пользовательские S-функции или файлы TLC

Примечание

Кодирующие стандарты для этих двух источников находятся вне контроля генератора кода. Эти стандарты могут быть источником для проблем податливости, таких как код, который использует функции C99, не поддержанные в ANSI C, подмножестве C89/C90.

Факторы языка программирования

Генератор кода производит C и Код С++. Рассмотрите следующее, когда вы выбираете язык программирования:

  • Ваш проект требует, чтобы вы сконфигурировали генератор кода, чтобы использовать определенный компилятор? Генерация кода C/C++ на Windows® требует этого выбора.

  • Ваш проект требует, чтобы вы изменили параметр конфигурации языка по умолчанию для модели? Смотрите Выбор C или Язык Программирования на C++.

  • Ваш проект требует, чтобы вы интегрировали наследие или пользовательский код со сгенерированным кодом? Для сводных данных опций интегрирования смотрите то, Что Внешняя Интеграция кода?.

  • Ваш проект требует, чтобы вы интегрировали C и Код С++? Если так, смотрите то, Что Внешняя Интеграция кода?.

    Примечание

    Можно смешать C и Код С++ при интеграции сгенерированного кода с пользовательским кодом. Однако необходимо знать о различиях между C и соглашениями рычажного устройства C++ по умолчанию, и добавлять extern "C"'спецификатор рычажного устройства при необходимости. Для получения дополнительной информации отличающихся соглашений рычажного устройства и как применить extern "C", обратитесь к справочнику языка программирования на C++.

  • Ваш проект требует поддержки генерации кода со стороны других продуктов? Смотрите Ограничения Поддержки Языка C++.

Для примеров генерации Кода С++ с Stateflow® смотрите sfcndemo_cppcount модель или sf_cpp модель.

Ограничения поддержки языка C++

Чтобы использовать поддержку языка C++, вы могли должны быть сконфигурировать генератор кода, чтобы использовать определенный компилятор. Например, если поддерживаемый компилятор не установлен на вашем компьютере Microsoft® Windows, компилятором по умолчанию является lcc Компилятор C поставляется с продуктом MATLAB. Этот компилятор не поддерживает C++. Если вы не конфигурируете генератор кода, чтобы использовать компилятор C++, прежде чем вы зададите C++ для генерации кода, программное обеспечение производит сообщение об ошибке.

Ограничения генератора кода на поддержку C++ включают:

  • Генератор кода не поддерживает генерацию Кода С++ для следующего:

    Simscape™ Driveline™
    Первое поколение Simscape Multibody™ (Второе поколение Simscape Multibody поддерживается),
    Энергосистемы Simscape Electrical™
    Simulink Real-Time™
  • Для ERT и основанных на ERT системных конечных файлов с набором Code interface packaging к Nonreusable function, следующие поля в настоящее время не поддерживают .cpp расширение.

    • Data definition filename

    • Definition file для объекта данных, который является объектом Simulink.Signal или Simulink.Parameter классы или их подклассы.

    Если вы задаете имя файла с .c расширение или без расширения и задает C++ для языка генерации кода, генератор кода производит .cpp файл.

Генератор кода принимает, переносятся на переполнении целого числа со знаком

Генератор кода уменьшает использование памяти и улучшает выполнение сгенерированного кода путем предположения, что операции C целого числа со знаком переносятся на переполнении. Переполнение целого числа со знаком происходит, когда результат арифметической операции находится вне области значений значений, которые может представлять тип выходных данных. Язык программирования C не задает результаты таких операций. Некоторые компиляторы C настойчиво оптимизируют подписанные операции для значений в области значений за счет условий переполнения. Другие компиляторы сохраняют полное поведение переноса на переполнении. Например, gcc и компиляторы MinGW предоставляют возможность переноситься на переполнении надежно для переполнения целого числа со знаком. Сгенерированное изображение программы для модели может привести к результатам, которые отличаются от результатов симуляции модели, потому что обработка переполнения варьируется, в зависимости от вашего компилятора.

Когда вы генерируете код, если вы используете поддерживаемый компилятор с опциями по умолчанию, сконфигурированными генератором кода, компилятор сохраняет полное поведение переноса на переполнении. Если вы изменяете параметры компилятора или компилируете код в другой среде разработки, возможно, что компилятор не сохраняет полное поведение переноса на переполнении. В этом случае исполняемая программа может привести к непредсказуемым результатам.

Если этой проблемой является беспокойство о вашем приложении, рассмотрите один или несколько следующих действий:

  • Проверьте, что скомпилированный код производит ожидаемые результаты.

  • Если ваш компилятор может обеспечить переносящееся поведение, включите его. Например, для gcc компилятора или компилятора на основе gcc, такого как MinGW, конфигурируют процесс сборки, чтобы использовать параметр компилятора -fwrapv.

  • Выберите компилятор, который переносится на целочисленном переполнении.

  • Если вам установили Embedded Coder, разрабатываете и применяете заменяющую библиотеку пользовательского кода, чтобы заменить код, сгенерированный для целых чисел со знаком. Для получения дополнительной информации смотрите Заменяющую Индивидуальную настройку Кода.

Выберите и сконфигурируйте компилятор

Чтобы просмотреть установленные компиляторы и выбрать компилятор по умолчанию, в Командном окне, введите:

mex -setup

На компьютере Windows можно установить поддерживаемые компиляторы и выбрать компилятор по умолчанию.

На платформе UNIX® компилятором по умолчанию является GNU® gcc/g++ для GNU или XCode для Mac.

Если настройка подхода сборки не выбирает определенный компилятор, генератор кода использует компилятор по умолчанию в процессе сборки.

В основном, заданный системный конечный файл определяет компилятор, которого требует генератор кода:

  • Если вы выбираете основанный на наборе инструментальных средств системный конечный файл, такой как grt.tlc (Типовая цель в реальном времени), ert.tlc (Embedded Coder®) или autosar.tlc (Embedded Coder для AUTOSAR), подпанель Build process отображает параметры конфигурации для процесса сборки. Используйте параметр конфигурации Toolchain, чтобы выбрать компилятор и сопоставленные инструменты для вашей сборки модели. Чтобы подтвердить выбранный набор инструментальных средств, нажмите Validate Toolchain.

  • Если вы выбираете make-файл шаблона базирующийся системный конечный файл (TMF), такой как rsim.tlc, отображения подпанели Build process обрабатывают параметры make-файла по шаблону для конфигурирования процесса сборки. Параметр Template makefile отображает файл TMF по умолчанию для выбранного системного конечного файла. Если системный конечный файл поддерживает специфичные для компилятора make-файлы шаблона (например, Быстрые системные конечные файлы Симуляции или S-функции), можно установить Template makefile на специфичный для компилятора TMF, такой как rsim_lcc.tmf или rsim_unix.tmf. (См., Сравнивают Системную Поддержку Конечного файла Через продукты (Simulink Coder) для допустимых имен TMF.)

Если сгенерированный код превышает предел статического ЗУ на 2 Гбита, ошибка компилятора происходит. Решать этот вопрос:

  • Для основанных на GRT системных конечных файлов, параметр конфигурации модели набора Code interface packaging к Reusable function.

  • Для основанных на ERT системных конечных файлов, параметр конфигурации модели набора Code interface packaging к Reusable function и выберите параметр Use dynamic memory allocation for model initialization.

Включайте исходный код S-функции

Когда генератор кода создает модели с S-функциями, исходный код для S-функций может быть или в текущей папке или в той же папке как их файл MEX. Генератор кода добавляет включать путь к сгенерированным make-файлам каждый раз, когда он находит файл с именем sfncnameH в той же папке как файл MEX S-функции. Эта папка должна быть на пути MATLAB.

Точно так же генератор кода добавляет правило для папки, когда это находит файл sfncnameC (или .cpp) в той же папке, когда файл MEX S-функции находится в.

Похожие темы

Внешние веб-сайты