Когда вы будете использовать программное обеспечение Simulink®, чтобы создать и выполнить модель и использовать генератор кода, чтобы произвести код C or C++, рассмотрите свою настройку максимум для трех сред выполнения:
Среда выполнения компьютера разработчика MATLAB®, которая запускает программное обеспечение MathWorks® во время разработки приложений.
Производственная аппаратная среда выполнения, в которой вы развертываете приложение, когда она введена в эксплуатацию.
Тестовая аппаратная среда выполнения, в которой вы тестируете разрабатываемое приложение перед развертыванием.
Одна среда выполнения может служить в нескольких мощностях, но среды выполнения остаются концептуально отличными. Часто, компьютер разработчика MATLAB является тестовым оборудованием. Как правило, производственное оборудование отличается от и менее мощно, чем, разработка MATLAB или тестовое оборудование. Много типов производственного оборудования могут сделать немного более, чем запущенный загруженный исполняемый файл.
Предоставьте информацию о производственной аппаратной плате и компиляторе, который вы используете с ним когда:
Вы используете программное обеспечение Simulink, чтобы симулировать модель, для которой вы позже генерируете код
Вы используете генератор кода, чтобы произвести код для развертывания на производственном оборудовании
Программное обеспечение использует плату и информацию о компиляторе, чтобы получить битно-истинное соглашение для результатов операций целочисленной и фиксированной точки, выполняемых в симуляции и в коде, сгенерированном для производственного оборудования. Генератор кода использует информацию, чтобы создать код, который выполняется с максимальной производительностью.
Когда вы генерируете код для тестирования на тестовом оборудовании, предоставляете информацию о тестовой аппаратной плате и компиляторе, который вы используете. Генератор кода использует эту информацию, чтобы создать код, который предоставляет битно-истинное соглашение между результатами:
Операции целочисленной и фиксированной точки выполняются в симуляции
Сгенерированный код работает на производственном оборудовании
Сгенерированный код работает на тестовом оборудовании
Можно достигнуть битно-истинного соглашения для результатов, даже если производство и тестирует оборудование, отличаются. Где стандарт C не полностью задает поведение, компиляторы для двух типов оборудования могут использовать различные значения по умолчанию.
Можно задать симуляцию модели или генерацию кода для определенной аппаратной платы и ее типа устройства. Например, можно установить размер данных, порядок байтов и поведение компилятора, такое как целочисленное округление. Можно сконфигурировать:
Производственное оборудование и компилятор, который вы используете с ним. Эта информация влияет на симуляцию и генерацию кода. Смотрите, что Производственное Оборудование В качестве примера Устанавливает, Который Влияет на Симуляцию Режима normal mode.
Тестовое оборудование и компилятор, который вы используете с ним. Эта информация влияет только на генерацию кода.
Сконфигурируйте производственное оборудование путем выбора Configuration Parameters> Hardware Implementation. По умолчанию панель Аппаратной реализации перечисляет Hardware board, Device vendor и поля параметра Device type только. Если у вас нет пакетов поддержки установленного оборудования, Hardware board перечисляет значения None
или Determine by Code Generation system target file
, и Get Hardware Support Packages
. После установки пакета аппаратной поддержки список также включает соответствующее аппаратное имя платы. Если вы выбираете аппаратное имя платы, параметры для той платы появляются. Чтобы установить детали устройства, такие как размер данных и порядок байтов, нажимают Device details.
Сконфигурируйте тестовое оборудование на Configuration Parameters> Hardware Implementation> панель Advanced parameters. Чтобы включить параметры для конфигурирования тестовых аппаратных деталей, отключите Configuration Parameters> Hardware Implementation> Advanced parameters> параметр Test hardware is the same as production hardware. Код, сгенерированный для тестового оборудования, выполняется в среде, заданной тестовыми аппаратными параметрами. Код ведет себя, как будто он выполнялся в среде, заданной для производственного оборудования. Для получения дополнительной информации смотрите Тестовые Аппаратные Факторы.
Значения по умолчанию и свойства появляются как начальные значения в панели Аппаратной реализации когда:
Вы задаете System target file в панели Code Generation.
Системный конечный файл задает микропроцессор по умолчанию и его аппаратные свойства.
Вы не можете изменить параметры, которые имеют только одно возможное значение. Параметры, которые имеют больше чем одно возможное значение, предоставляют список допустимых значений. Если вы задаете аппаратные свойства вручную в панели Hardware Implementation, проверяете, что эти значения сопоставимы с системным конечным файлом. В противном случае сгенерированный код может не скомпилировать или выполняется, или может выполнить, но привести к неправильным результатам.
Параметры аппаратной реализации описывают оборудование и свойства компилятора к программному обеспечению MATLAB. Генератор кода использует информацию, чтобы произвести код для среды выполнения, которая запускается максимально эффективно. Сгенерированный код дает битно-истинное соглашение для результатов операций целочисленной и фиксированной точки в симуляции, производственном коде и тестовом коде.
Для получения дополнительной информации об определенных параметрах, смотрите Панель Аппаратной реализации. Чтобы видеть пример возможностей панели Hardware Implementation, смотрите
модель в качестве примера. Для получения дополнительной информации связанный с конфигурированием аппаратной реализации, см.:rtwdemo_targetsettings
Установите поведение округления частного для деления целого числа со знаком
Установите арифметическое поведение сдвига вправо для целых чисел со знаком
Задайте аппаратную плату, которая запускает код, сгенерированный из вашей модели. Выберите значение для Configuration Parameters> Hardware Implementation> Hardware board.
Панель Аппаратной реализации идентифицирует, что системный конечный файл выбрал On Configuration Parameters> Code Generation.
Чтобы сконфигурировать тестовое оборудование, используйте Configuration Parameters> Hardware Implementation> панель Advanced parameters.
Чтобы включить параметры для конфигурирования тестовых аппаратных деталей, установите ProdEqTarget
к off
.
Способы задать аппаратный Совет
Если | Выбрать |
---|---|
Меню включает имя аппаратной платы, которую вы хотите использовать. | Имя той аппаратной платы. Если вы выбираете аппаратное имя платы, параметры для той платы появляются. |
Меню не включает имя аппаратной платы, которую вы хотите использовать. |
То значение открывает Инсталлятор Пакета Поддержки. Установите пакет поддержки, который вы хотите. После того, как вы установите пакет поддержки, меню включает имена платы соответствующей аппаратной. |
Настройка модели использует системный конечный файл |
Никакая аппаратная плата не задана для аппаратной реализации. |
Настройка модели не использует системный конечный файл |
Генератор кода использует заданный системный конечный файл, чтобы определить аппаратную реализацию. |
Чтобы задать поставщика микропроцессора аппаратного устройства, используйте параметр поставщика Устройства. Ваш выбор определяет доступные микропроцессоры в меню Device type. Если имя поставщика не появляется, выберите Custom Processor
. Затем используйте параметр Device type, чтобы задать микропроцессор.
Для полных списков Device vendor и значений Device type, смотрите поставщика Устройства и Тип устройства.
Чтобы добавить Device vendor и значения Device type к набору по умолчанию, который отображен на панели Hardware Implementation, смотрите Регистр Новые Аппаратные устройства.
Чтобы задать имя микропроцессора от поддерживаемых устройств, перечисленных для вашего выбора Device vendor, используйте параметр Типа устройства. Если микропроцессор не появляется в меню, изменяет Device vendor в Custom Processor
. Затем задайте детали устройства для своего отдельного устройства.
Если вы выбираете тип устройства, для которого системный конечный файл задает аппаратные свойства по умолчанию, свойства появляются как начальные значения. Вы не можете изменить значение параметров только с одним возможным выбором. Параметры, которые имеют больше чем одно возможное значение, предоставляют меню. Выберите значения для своего оборудования.
Количество параметров битов описывает native word size микропроцессора и битные длины char, коротких, международных, и длинных данных. Для генерации кода, чтобы успешно выполниться:
Битные длины должны быть таковы что char <= короткий <= int <= долго.
Битные длины должны быть множителями 8, имеющий до 32.
Длина в битах для длинных данных не должна быть меньше 32.
rtwtypes.h
файл задает имена целочисленного типа. Значения, которые вы вводите, должны быть сопоставимы с размерами слова, как задано в компиляторе limits.h
заголовочный файл. Генератор кода сопоставляет свои имена целочисленного типа к соответствующим именам целочисленного типа Simulink.
Если никакой тип ANSI® C с размером соответствующего слова не доступен, но больший ANSI C тип доступен, генератор кода использует больший тип для int8_T
, uint8_T
, int16_T
, uint16_T
, int32_T
, и uint32_T
. Когда генератор кода использует больший тип, получившиеся регистрируемые значения (например, логгирование MAT-файла) могут иметь различные типы данных, чем регистрируемые значения для симуляции.
Приложение может использовать целочисленные данные длины от 1 (без знака) или 2 бита (со знаком) выше на 32 бита. Если целочисленная длина совпадает с длиной доступного типа, использование генератора кода тот тип. Если соответствующий тип не доступен, генератор кода использует самый маленький доступный тип, который может содержать данные, генерируя код, который не использует ненужные биты высшего порядка. Например, на оборудовании, которое поддерживает 8-битные, 16-битные, и 32-битные целые числа для сигнала, заданного как 24 бита, генератор кода реализует данные как int32_T
или uint32_T
.
Код, который использует эмулированные целочисленные данные, не максимально эффективен. Этот код может быть полезен во время разработки приложений для эмуляции целочисленных длин, которые доступны только на производственном оборудовании. Эмуляция не влияет на результаты выполнения.
Во время генерации кода программное обеспечение проверяет совместимость типов данных модели с типами данных, которые вы задаете для производственного оборудования.
Если ни одна из длин, которые вы задаете для производственных аппаратных целых чисел, не составляет 32 бита, программное обеспечение генерирует ошибку.
Если длины типов данных, что использование модели меньше, чем доступные производственные аппаратные целочисленные длины, программное обеспечение, генерируют предупреждение.
Отображение целочисленных типов от генератора кода до Simulink
Целочисленный тип генератора кода | Целочисленный тип Simulink |
---|---|
boolean_T | boolean |
int8_T | int8 |
uint8_T | uint8 |
int16_T | int16 |
uint16_T | uint16 |
int32_T | int32 |
uint32_T | uint32 |
Параметр Порядка байтов задает, использует ли оборудование Big Endian
(старший значащий байт сначала) или Little Endian
(младший значащий байт сначала) порядок байтов. Если оставлено как Unspecified
, генератор кода производит код, который определяет порядок байтов оборудования. Эта установка наименее эффективна.
ANSI C не полностью задает метод округления частного для компиляторов, чтобы использовать при делении одного целого числа со знаком на другого. Так, поведение является зависящим от реализации. Если оба целых числа положительны, или оба отрицательны, частное должно округлить в меньшую сторону. Если или целое число положительно, и другой отрицательно, частное может окружить или вниз.
Параметр Signed integer division rounds to сообщает генератору кода о том, как компилятор округляет результат деления целого числа со знаком. Предоставление этой информации не изменяет операцию компилятора. Это только описывает то поведение к генератору кода, который использует информацию, чтобы оптимизировать код, сгенерированный для деления целого числа со знаком. Значения параметров:
Zero
— Если частное между двумя целыми числами, компилятор выбирает целое число, которое ближе, чтобы обнулить как результат.
Floor
— Если частное между двумя целыми числами, компилятор выбирает целое число, которое ближе к отрицательной бесконечности.
Undefined
— Если Zero
или Floor
не описывайте поведение компилятора или если то поведение неизвестно, выберите это значение.
Постарайтесь не выбор Undefined
. Когда генератор кода не знает деление целого числа со знаком, округляющее поведение компилятора, сборка модели генерирует дополнительный код.
Поведение округления частного компилятора варьируется согласно этим значениям.
Можно получить реализацию компилятора для деления целого числа со знаком, округляющегося из документации компилятора. Если документация не доступна, можно определить это поведение экспериментом.
Частное в качестве примера, округляющееся для нуля, пола, и неопределенный
N | D | Идеальный N/D | Нуль | Пол | Неопределенный |
---|---|---|---|---|---|
33 | 4 | 8.25 | 8 | 8 | 8 |
-33 | 4 | -8.25 | -8 | -9 | -8 |
33 | -4 | -8.25 | -8 | -9 | -8 |
-33 | -4 | 8.25 | 8 | 8 | 8 |
ANSI C не задает поведение сдвигов вправо на отрицательных целых числах для компиляторов. Так, поведение является зависящим от реализации. Опция Shift right on a signed integer as arithmetic shift сообщает генератору кода о том, как компилятор реализует сдвиги вправо на отрицательных целых числах. Предоставление этой информации не изменяет операцию компилятора. Это только описывает то поведение к генератору кода, который использует информацию, чтобы оптимизировать код, сгенерированный для арифметических сдвигов вправо.
Если компилятор C реализует сдвиг вправо целого числа со знаком как арифметический сдвиг вправо, выберите опцию. В противном случае очистите опцию. Арифметический сдвиг вправо заполняет биты, освобожденные сдвигом вправо со значением старшего значащего бита, который указывает на знак номера в two's-дополнительном обозначении. Опция выбрана по умолчанию. Если ваш компилятор обрабатывает сдвиги вправо как арифметические сдвиги, эта установка предпочтена.
Когда вы выбираете опцию, генератор кода производит эффективный код каждый раз, когда модель Simulink выполняет арифметические сдвиги на целых числах со знаком.
Когда опция очищена, генератор кода производит полностью портативный но менее эффективный код, чтобы реализовать правильные арифметические сдвиги.
Можно получить реализацию компилятора для арифметических сдвигов вправо из документации компилятора. Если документация не доступна, можно определить это поведение экспериментом.
Если ваша модель была создана, прежде чем Релиз 14 и вы не обновили модель, параметр Configure current execution hardware device (TargetUnknown
) значением является 'on'
по умолчанию.
Чтобы обновить вашу модель, очистите поле для Configuration Parameters> Hardware Implementation> Advanced parameters> Test hardware> Configure test hardware .Or в Командном окне, введите:
cs = getActiveConfigSet('your_model_name'); set_param(cs,'TargetUnknown','off');
Это обновление вашей модели:
Включает параметр Test Hardware is the same as production hardware (ProdEqTarget
), устанавливая параметр на 'on'
.
Копирует параметр Production device vendor and type (ProdHWDeviceType
) значение к параметру Test device vendor and type (TargetHWDeviceType
).
Завершать обновление:
Очистите поле для Configuration Parameters> Hardware Implementation> Advanced parameters> Test hardware> Test Hardware is the same as production hardware. Примените этот шаг, только если ваше производство и тестирует оборудование, отличаются.
Установите параметры в Configuration Parameters> Hardware implementation > Advanced parameters, чтобы совпадать с вашими промышленными системами и системами тестирования.
Сохраните модель.
Когда вы конфигурируете производственное оборудование, рассматриваете эти вопросы:
Производственное оборудование может иметь размеры слова и другие характеристики оборудования, которые отличаются от компьютера разработчика MATLAB. Можно моделировать код по оборудованию, которое отличается от производственного оборудования или компьютера разработчика MATLAB. При создании кода генератор кода составляет эти различия.
Продукт Simulink использует часть информации в производственной аппаратной конфигурации. Та информация позволяет симуляциям без генерации кода дать те же результаты как выполняющий сгенерированный код. Например, результаты могут обнаружить состояние ошибки, которое возникает на производственном оборудовании, таком как аппаратное переполнение.
Генератор кода производит код, который предоставляет битно-истинному соглашению с результатами Simulink для операций целочисленной и фиксированной точки. Сгенерированный код, который эмулирует недоступные запуски длин данных менее эффективно, чем без эмуляции. Эмуляция не влияет на битно-истинное соглашение с Simulink для результатов целочисленной и фиксированной точки.
Если вы изменяете среды выполнения во время разработки приложений, прежде, чем сгенерировать или регенерировать код, реконфигурировали параметры аппаратной реализации для новой среды выполнения. Когда код выполняется на оборудовании, для которого он не был сгенерирован, битно-истинное соглашение не всегда достигается для результатов операций целочисленной и фиксированной точки в симуляции, производственном коде и тестовом коде.
Чтобы скомпилировать код, сгенерированный из модели, используйте Целочисленный параметр режима округления на блоках модели, чтобы симулировать округляющееся поведение компилятора C, который вы предназначаете. Эта установка появляется на панели Signal Attributes в диалоговых окнах параметра блоков, которые могут выполнить арифметику целого числа со знаком, такую как блоки n-D Lookup Table и Product.
Для большинства блоков значение Целочисленного режима округления полностью задает округление поведения. Для блоков, которые поддерживают данные фиксированной точки и самый простой режим округления, значение Signed integer division rounds to также влияет на округление. Для получения дополнительной информации смотрите Точность (Fixed-Point Designer).
Когда модели содержат блоки Model, конфигурируют модели, на которые они ссылаются, чтобы использовать настройки идентичного оборудования.
По умолчанию тестовая аппаратная конфигурация совпадает с настройкой для производственного оборудования. Можно использовать сгенерированный код для тестирования в среде, которая идентична производственной среде.
Если тестовые и производственные среды отличаются, можно сгенерировать код, который работает на тестовом оборудовании, как будто это работало на производственном оборудовании:
Чтобы включить тестовые аппаратные параметры, очистите поле для Configuration Parameters> Hardware Implementation> Advanced parameters> Test hardware> Test hardware is the same as production hardware. Или, в типе Командного окна:
cs = getActiveConfigSet('your_model_name'); set_param(cs,'ProdEqTarget','off');
Задайте детали типа устройства через тестовое оборудование (Target*
Параметры.
Если вы выбираете системный конечный файл, который задает микропроцессор по умолчанию и его аппаратные свойства, эти значения по умолчанию и свойства появляются как начальные значения.
Параметры только с одним возможным значением не могут быть изменены. Если вы изменяете аппаратные свойства, проверяйте, что их значения сопоставимы с системным конечным файлом. В противном случае сгенерированный код может не скомпилировать или выполняется, или может выполнить, но привести к неправильным результатам.
Изменяя некоторые производственные аппаратные настройки, например, ProdLongLongMode
и ProdIntDivRoundTo
, может влиять на результаты симуляции режима normal mode. Следующий пример симулирует сумматор с четырьмя входными параметрами. В первой симуляции, ProdLongLongMode
отключен. Во второй симуляции, ProdLongLongMode
включен. В графике симуляции выходные параметры вы наблюдаете небольшие различия между выходными значениями в области значений временного шага 125–175.
model = 'hwSettingEffect'; new_system(model) open_system(model) % Create adder pos = [140 140 200 340]; add_block('simulink/Math Operations/Add', ... [model '/sum_int32'], ... 'Inputs','++++', ... 'SaturateOnIntegerOverflow', ... 'on', ... 'Position', ... pos) pos = [75 155 105 175]; add_block('built-in/Inport',[model '/In1'],'Position',pos) set_param([model '/In1'], 'OutDataTypeStr', ... 'int32','PortDimensions','1','SampleTime','1'); add_line(model, 'In1/1','sum_int32/1') pos = [75 205 105 225]; add_block('built-in/Inport',[model '/In2'],'Position',pos) set_param([model '/In2'], 'OutDataTypeStr', ... 'int32','PortDimensions','1','SampleTime','1'); add_line(model, 'In2/1','sum_int32/2') pos = [75 255 105 275]; add_block('built-in/Inport',[model '/In3'],'Position',pos) set_param([model '/In3'], 'OutDataTypeStr', ... 'int32','PortDimensions','1','SampleTime','1'); add_line(model, 'In3/1','sum_int32/3') pos = [75 305 105 325]; add_block('built-in/Inport',[model '/In4'],'Position',pos) set_param([model '/In4'], 'OutDataTypeStr', ... 'int32','PortDimensions','1','SampleTime','1'); add_line(model, 'In4/1','sum_int32/4') pos = [275 230 305 250]; add_block('built-in/Outport',[model '/Out1'],'Position',pos) add_line(model, 'sum_int32/1','Out1/1') % Specify input data t = 0:200; peakValue = 1.5e9; in1 = peakValue * sin(t*2*pi/100); in2 = peakValue * cos(t*2*pi/70); in3 = -peakValue * sin(t*2*pi/40); in4 = -peakValue * cos(t*2*pi/30); set = Simulink.SimulationData.Dataset; set = set.addElement(1, timeseries(int32(in1),t,'Name','sig1')); set = set.addElement(2, timeseries(int32(in2),t,'Name','sig2')); set = set.addElement(3, timeseries(int32(in3),t,'Name','sig3')); set = set.addElement(4, timeseries(int32(in4),t,'Name','sig4')); set_param(model, 'LoadExternalInput', 'on'); set_param(model, 'ExternalInput', 'set'); set_param(model, 'StopTime', '50'); % Disable production hardware setting and run first simulation set_param(model, 'ProdLongLongMode', 'off'); [~, ~, y1] = sim(model, 200); % Enable production hardware setting and run second simulation set_param(model, 'ProdLongLongMode', 'on'); [~, ~, y2] = sim(model, 200); plot([y1 y2]); figure(gcf);
Различие в поведении происходит из-за типа данных аккумулятора в блоке Sum. Параметры блоков Accumulator data type установлены в Inherit: Inherit via internal rule
. В данном примере получившийся тип данных аккумулятора 64 бита шириной если использование long long
C тип данных включен. В противном случае это 32 бита шириной. В зависимости от входных значений для блока суммы 32-битный аккумулятор может насыщать, когда 64-битный аккумулятор не делает. Поэтому поведение режима normal mode может зависеть от
ProdLongLongMode
установка. В обоих случаях поведение режима normal mode и производственное аппаратное поведение соответствуют поразрядно.