Когда вы хотите код, который использует только одну точность, например, когда вы нацелены на процессор с одной точностью, можно использовать параметры конфигурации модели и параметры блоков, чтобы предотвратить введение double
в модели.
Для разработки и проверки модели с одной точностью смотрите Валидация встраиваемой модели с плавающей точкой. Если у вас есть Fixed-Point Designer™, можно использовать приложение Single Precision Converter (см. Single Precision Converter (Fixed-Point Designer)).
single
Тип данных по умолчанию для недоопределенных типовВ этом примере показано, как избежать введения типа данных с двойной точностью в код, сгенерированный для аппаратной цели с одной точностью.
Если вы задаете унаследованный тип данных для сигналов, но правила распространения типа данных не могут определить типы данных для сигналов, типы данных сигнала по умолчанию 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')
Сгенерируйте код из модели.
slbuild(model)
### Starting build procedure for: rtwdemo_underspecified_datatype ### Successful completion of build procedure for: rtwdemo_underspecified_datatype Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================================ rtwdemo_underspecified_datatype Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 6.9724s
В отчете о генерации кода просмотрите файл rtwdemo_underspecified_datatype.h
. Код использует double
тип данных для определения переменных In2
, In3
, и In4
поскольку типы данных Inport недоопределены в модели.
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
как тип данных по умолчанию
Откройте диалоговое окно Параметры конфигурации. На панели «Математика и типы данных» выберите single
в раскрывающемся списке По умолчанию для недоопределенного типа данных.
Также включите оптимизацию в командной строке.
set_param(model, 'DefaultUnderspecifiedDataType', 'single');
Сгенерируйте код из модели.
slbuild(model)
### Starting build procedure for: rtwdemo_underspecified_datatype ### Successful completion of build procedure for: rtwdemo_underspecified_datatype Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== rtwdemo_underspecified_datatype Code generated and compiled Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 5.7877s
В отчете о генерации кода просмотрите файл 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;