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

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

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

Процесс сборки также требует выбора набора инструментальных средств или файла make-файла шаблона. Набор инструментальных средств или файл make-файла шаблона определяет, какой компилятор запускается во время фазы создания сборки. Для получения дополнительной информации смотрите Выбор подхода к сборке и Настройка процесса сборки

Чтобы определить, какие шаблоны make-файлов доступны для вашего компилятора и системного целевого файла, см. Раздел «Сравнение поддержки системных целевых файлов между продуктами».

Для обоих сгенерированных файлов и пользовательских файлов расширение файла .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® встроенный блоком алгоритмический код

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

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

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

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

  • Встраиваемая система целевые файлы (для примера, кода запуска, блоков драйверов устройств)

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

Примечание

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

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

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

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

  • Требует ли ваш проект изменения настройки языкового строения по умолчанию для модели? См. раздел «Выбор языка программирования на C или C++».

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

  • Ваш проект требует от вас интеграции C и Кода С++? Если да, смотрите Что такое интегрирование внешнего кода? (Embedded Coder).

    Примечание

    Можно смешивать 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 Second Generation)
    Simscape Electrical™ степени
    Функции Simulink Real-Time™
  • Для ERT и основанных на ERT системных целевых файлов с Code interface packaging установкой на Nonreusable function, следующие поля в настоящее время не поддерживают .cpp расширение.

    • Data definition filename

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

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

Генератор кода принимает перенос при подписанных целочисленном переполнении

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

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

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

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

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

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

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

Выбор и настройка компилятора

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

mex -setup

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

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

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

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

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

  • Если вы выбираете шаблон make-файла (TMF) на основе системного целевого файла, такого как rsim.tlcв Build process подпанели отображаются параметры make-файла шаблона для настройки процесса сборки. Параметр Template makefile отображает файл TMF по умолчанию для выбранного системного целевого файла. Если системный целевой файл поддерживает make-файлы шаблонов для компилятора (для примера, Rapid Симуляции или S-Function системных целевых файлов), можно задать Template makefile на TMF для компилятора, например rsim_lcc.tmf или rsim_unix.tmf. (См. «Сравнение системных целевых файлов поддержки между продуктами» для получения допустимых имен 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-файлам каждый раз, когда он находит файл с именем sfncname.h в той же папке, что и S-функция Файла MEX. Эта папка должна находиться в пути MATLAB.

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

Похожие темы

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