Процесс сборки требует поддерживаемого компилятора. Компилятор, в этом контексте, относится к среде разработки, содержащей компоновщика, и сделайте утилиту и компилятор высокоуровневого языка. Для получения дополнительной информации на поддерживаемых версиях компилятора, см.:
При создании исполняемой программы процесс сборки должен смочь получить доступ к поддерживаемому компилятору. Процесс сборки может найти, что компилятор использует на основе вашего компилятора MEX по умолчанию.
Процесс сборки также требует выбора make-файла шаблона или набора инструментальных средств. Make-файл набора инструментальных средств или шаблона определяет, какой компилятор запускается, во время сделать фазы сборки. Для получения дополнительной информации смотрите, Выбирают Build Approach и Configure Build Process (Simulink Coder)
Чтобы определить, какие make-файлы шаблонов доступны для вашего компилятора и системного конечного файла, смотрите, Сравнивают Системную Поддержку Конечного файла Через продукты (Simulink Coder).
И для сгенерированных файлов и для предоставленных пользователями файлов, расширение файла, .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® встроенный алгоритмический код блока
Сгенерированный код уровня системы (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++, вы могли должны быть сконфигурировать генератор кода, чтобы использовать определенный компилятор. Например, если поддерживаемый компилятор не установлен на вашем компьютере Microsoft® Windows, компилятор по умолчанию является компилятором C lcc
, поставленным с продуктом MATLAB. Этот компилятор не поддерживает C++. Если вы не конфигурируете генератор кода, чтобы использовать компилятор C++, прежде чем вы зададите C++ для генерации кода, программное обеспечение производит сообщение об ошибке.
Ограничения генератора кода на поддержку C++ включают:
Генератор кода не поддерживает генерацию Кода С++ для следующего:
Simscape™ Driveline™ |
Первое поколение Simscape Multibody™ (Второе поколение Simscape Multibody поддерживается), |
Энергосистемы Simscape Electrical™ |
Simulink Real-Time™ |
Для ERT и основанных на ERT системных конечных файлов с Configuration Parameters> Data Placement> Interface> набор Code interface packaging к Nonreusable function
, следующие поля в настоящее время не принимают расширение .cpp
. Если вы задаете имя файла с расширением .c
или без расширения и задаете C++ для языка генерации кода, генератор кода производит файл .cpp
.
Поле Configuration Parameters> Code Placement> Data definition filename (доступный, когда Configuration Parameters> Code Placement> Data definition установлен в Data defined in a single separate source file
),
Поле Definition file для объекта данных в Model Explorer. Объекты данных являются объектами класса Simulink.Signal
, Simulink.Parameter
и подклассы.
Генератор кода уменьшает использование памяти и улучшает выполнение сгенерированного кода путем предположения, что операции C целого числа со знаком переносятся на переполнении. Переполнение целого числа со знаком происходит, когда результат арифметической операции вне области значений значений, которые может представлять тип выходных данных. Язык программирования C не задает результаты таких операций. Некоторые компиляторы C настойчиво оптимизируют подписанные операции для значений в области значений за счет условий переполнения. Другие компиляторы сохраняют полное поведение переноса на переполнении. Например, gcc и компиляторы MinGW предоставляют возможность переноситься на переполнении надежно для переполнения целого числа со знаком. Сгенерированное изображение программы для модели может привести к результатам, которые отличаются от результатов симуляции модели, потому что обработка переполнения отличается, в зависимости от вашего компилятора.
Когда вы генерируете код, если вы используете поддерживаемый компилятор с опциями по умолчанию, сконфигурированными генератором кода, компилятор сохраняет полное поведение переноса на переполнении. Если вы изменяете параметры компилятора или компилируете код в другой среде разработки, возможно, что компилятор не сохраняет полное поведение переноса на переполнении. В этом случае исполняемая программа может привести к непредсказуемым результатам.
Если этой проблемой является беспокойство о вашем приложении, рассмотрите один или несколько следующих действий:
Проверьте, что скомпилированный код производит ожидаемые результаты.
Если ваш компилятор может обеспечить переносящееся поведение, включите его. Например, для gcc компилятора или компилятора на основе gcc, такого как MinGW, конфигурируют процесс сборки, чтобы использовать параметр компилятора -fwrapv
.
Выберите компилятор, который переносится на целочисленном переполнении.
Если вам установили Embedded Coder, разрабатываете и применяете заменяющую библиотеку пользовательского кода, чтобы заменить код, сгенерированный для целых чисел со знаком. Для получения дополнительной информации смотрите Заменяющую Индивидуальную настройку Кода.
Компилятор для вашей сборки модели появляется в параметрах процесса сборки в Configuration Parameters> Code Generation. Просмотреть установленные компиляторы и выбрать компилятор по умолчанию, в типе Командного окна:
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 для поля Configuration Parameters> Code Generation> Build process> Toolchain settings.
Если вы выбираете make-файл шаблона базирующийся системный конечный файл (TMF), такой как rsim.tlc
, отображения подпанели Build process обрабатывают параметры make-файла по шаблону для конфигурирования процесса сборки. Параметр Template makefile отображает файл TMF по умолчанию для выбранного системного конечного файла. Если системный конечный файл поддерживает специфичные для компилятора make-файлы шаблона (например, Быстрые системные конечные файлы Симуляции или S-функции), можно установить Template makefile на специфичный для компилятора TMF, такой как rsim_lcc.tmf
или rsim_unix.tmf
. (См., Сравнивают Системную Поддержку Конечного файла Через продукты (Simulink Coder) для допустимых имен TMF.)
Когда генератор кода создает модели с S-функциями, исходный код для S-функций может быть или в текущей папке или в той же папке как их файл MEX. Генератор кода добавляет включать путь к сгенерированным make-файлам каждый раз, когда он находит файл с именем
в той же папке как файл MEX S-функции. Эта папка должна быть на пути MATLAB.sfncname.h
Точно так же генератор кода добавляет правило для папки, когда это находит файл
(или sfncname.c
.cpp
) в той же папке, как файл MEX S-функции находится в.