Задайте тип данных с одинарной точностью для встраиваемого приложения

Когда это необходимо, код, который использует только одинарную точность, такой как тогда, когда вы предназначаетесь для процессора с одинарной точностью, можно использовать параметры конфигурации модели и параметры блоков, чтобы предотвратить введение 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: rtwdemo_underspecified_datatype
### Successful completion of build procedure for: 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: rtwdemo_underspecified_datatype
### Successful completion of build procedure for: 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;

Похожие темы