Когда это необходимо, код, который использует только одинарную точность, такой как тогда, когда вы предназначаетесь для процессора с одинарной точностью, можно использовать параметры конфигурации модели и параметры блоков, чтобы предотвратить введение double
в модели.
Чтобы спроектировать и подтвердить модель с одинарной точностью, смотрите, Подтверждают Встроенную Модель С плавающей точкой (Simulink). Если у вас есть Fixed-Point Designer™, можно использовать приложение Single Precision Converter (см. Проект С одинарной точностью для Simulink (Fixed-Point Designer)).
single
Тип данных как значение по умолчанию для типов UnderspecifiedВ этом примере показано, как постараться не вводить тип данных с двойной точностью в коде, сгенерированном для аппаратной цели с одинарной точностью.
Если вы задаете наследованный тип данных для сигналов, но правила распространения типа данных не могут определить типы данных для сигналов, значения по умолчанию типов данных сигнала к double
. Можно использовать параметр конфигурации модели, чтобы задать тип данных по умолчанию как single
.
Исследуйте модель в качестве примера
Откройте модель в качестве примера rtwdemo_underspecified_datatype и сконфигурируйте ее, чтобы показать сгенерированные имена блоков.
model = 'rtwdemo_underspecified_datatype'; load_system(model) set_param(model,'HideAutomaticNames','off') open_system(model);
Корень импортирует In2
, In3
, и In4
задайте Inherit: Auto
для параметров блоков Типа данных. Нисходящие блоки также используют наследованные типы данных.
Сгенерируйте код с double
как тип данных по умолчанию
Модель запускается с Системного набора конечного файла параметра конфигурации к ert.tlc
, который требует Embedded Coder. Установите Системный конечный файл на grt.tlc
вместо этого.
set_param(model,'SystemTargetFile','grt.tlc')
Сгенерируйте код из модели.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_underspecified_datatype ### Successful completion of build procedure for model: rtwdemo_underspecified_datatype
В отчете генерации кода просмотрите файл rtwdemo_underspecified_datatype.h
. Код использует double
тип данных, чтобы задать переменные In2
, In3
, и In4
потому что типы данных Inport являются underspecified в модели.
cfile = fullfile('rtwdemo_underspecified_datatype_grt_rtw',... 'rtwdemo_underspecified_datatype.h'); rtwdemodbtype(cfile,... '/* External inputs (root inport signals with default storage) */',... '/* External outputs (root outports fed by signals with default storage) */',... 1, 0);
/* External inputs (root inport signals with default storage) */ typedef struct { int8_T In1; /* '<Root>/In1' */ real_T In2; /* '<Root>/In2' */ real_T In3; /* '<Root>/In3' */ real_T In4; /* '<Root>/In4' */ } ExtU_rtwdemo_underspecified_d_T;
Сгенерируйте код с single
как тип данных по умолчанию
Откройте диалоговое окно Configuration Parameters. На Математике и панели Типов данных, выберите single
в Значении по умолчанию для underspecified типа данных выпадающий список.
В качестве альтернативы включите оптимизацию в командной строке.
set_param(model, 'DefaultUnderspecifiedDataType', 'single');
Сгенерируйте код из модели.
rtwbuild(model)
### Starting build procedure for model: rtwdemo_underspecified_datatype ### Successful completion of build procedure for model: rtwdemo_underspecified_datatype
В отчете генерации кода просмотрите файл rtwdemo_underspecified_datatype.h
. Код использует single
тип данных, чтобы задать переменные In2
, In3
, и In4
.
rtwdemodbtype(cfile,... '/* External inputs (root inport signals with default storage) */',... '/* External outputs (root outports fed by signals with default storage) */',... 1, 0);
/* External inputs (root inport signals with default storage) */ typedef struct { int8_T In1; /* '<Root>/In1' */ real32_T In2; /* '<Root>/In2' */ real32_T In3; /* '<Root>/In3' */ real32_T In4; /* '<Root>/In4' */ } ExtU_rtwdemo_underspecified_d_T;