Процесс сборки требует поддерживаемого компилятора. Компилятор, в этом контексте, относится к среде разработки, содержащей линкер и сделать утилиту, и высокоуровневый язык компилятор. Для получения дополнительной информации о поддерживаемых версиях компилятора смотрите:
При создании исполняемой программы процесс сборки должен иметь возможность доступа к поддерживаемому компилятору. Процесс сборки может найти компилятор, который будет использоваться на основе компилятора MEX по умолчанию.
Процесс сборки также требует выбора набора инструментальных средств или файла make-файла шаблона. Набор инструментальных средств или файл make-файла шаблона определяет, какой компилятор запускается во время фазы создания сборки. Для получения дополнительной информации смотрите Выбор подхода к сборке и Настройка процесса сборки
Чтобы определить, какие шаблоны make-файлов доступны для вашего компилятора и системного целевого файла, см. Раздел «Сравнение поддержки системных целевых файлов между продуктами».
Для обоих сгенерированных файлов и пользовательских файлов расширение файла .c
или .cpp
, определяет, использует ли процесс сборки компилятор C или C++. Если расширение файла .c
процесс сборки использует компилятор C для компиляции файла, а символы используют соглашение о редактировании C. Если расширение файла .cpp
процесс сборки использует компилятор C++ для компиляции файла, а символы - спецификацию редактирования C++.
Генератор кода производит код, который соответствует следующим стандартам:
Язык | Поддерживаемый стандарт |
---|---|
C | ISO®/ 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++».
Ваш проект требует, чтобы вы интегрировали наследие или пользовательский код с сгенерированным кодом? Для получения сводных данных интегрирования опций смотрите Что такое внешний Код Интегрирования?.
Ваш проект требует от вас интеграции C и Кода С++? Если да, смотрите Что такое интегрирование внешнего кода?.
Примечание
Можно смешивать C и Код С++ при интеграции сгенерированного кода с пользовательским кодом. Однако вы должны знать о различиях между соглашениями о редактированиях C++ по умолчанию и добавить extern "C"
'редактирование, где требуется. Подробная информация о различных конвенциях о редактированиях и о том, как применять extern "C"
см. ссылку по языку программирования C++.
Ваш проект требует поддержки генерации кода от других продуктов? См. «Ограничения поддержки языка C++».
Для примеров генерации кода С++ с Stateflow®, см. sfcndemo_cppcount
модель или sf_cpp
модель.
Чтобы использовать поддержку языка 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, разрабатывайте и применяйте пользовательскую библиотеку замещения кода для замены кода, сгенерированного для подписанных целых чисел. Для получения дополнительной информации см. раздел «Индивидуальная настройка замещения кода».
Чтобы просмотреть установленные компиляторы и выбрать компилятор по умолчанию, в Командном окне введите:
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-функций может быть либо в текущей папке, либо в той же папке, что и их файл MEX. Генератор кода добавляет путь включения к сгенерированным make-файлам каждый раз, когда он находит файл с именем
в той же папке, что и S-функция Файла MEX. Эта папка должна находиться в пути MATLAB.sfncname
.h
Точно так же генератор кода добавляет правило для папки, когда находит файл
(или sfncname
.c.cpp
) в той же папке, в которой находится Файл MEX S-функций.