Удалите код, который сопоставляет NaN с целочисленным нулем

В этом примере показано, как удалить код, который сопоставляет NaN к целочисленному нулю. Для плавающей точки к целочисленным преобразованиям включающее насыщение Simulink преобразует NaN в целочисленный нуль в процессе моделирования. Если ваша модель содержит входное значение NaN , можно указать, что генератор кода производит код, который сопоставляет NaN, чтобы обнулить. Без этого кода существует несоответствие между симуляцией и результатами генерации кода потому что в Стандарте C, каждое условие, включающее NaN оценивает ко лжи.

Если входные значения NaN не существуйте в своем приложении, можно удалить код, который сопоставляет NaN с целочисленным нулем. Удаление этого кода уменьшает размер и увеличивает скорость сгенерированного кода.

Модель в качестве примера

Откройте модель rtwdemo_float_mul_for_net_slope_correction в качестве примера путем ввода имени модели в Командном окне.

Модель содержит блок Data Type Conversion. Сконфигурируйте модель, чтобы преобразовать входной сигнал от single к uint8.

1. Откройте диалоговое окно Data Type Conversion. Для параметра типа Выходных данных выберите uint8.

2. Выберите Saturate на флажке параметра целочисленного переполнения. Выбор этого параметра указывает, что значение сигналов из области значений равняется или минимальному или максимальному значению, которое может представлять тип данных.

3. Откройте диалоговое окно Configuration Parameters. Выберите Поддержку: неличный флажок параметра чисел. Выбор этого параметра позволяет генерировать неличные данные и операции на неличных данных.

Сгенерируйте код без оптимизации

1. Создайте временную папку для сборки и инспекционного процесса.

2. Откройте диалоговое окно Configuration Parameters. На панели Оптимизации очистите Удалить код от с плавающей точкой до целочисленных преобразований с насыщением, которое сопоставляет NaN, чтобы обнулить флажок параметра.

3. Создайте модель.

### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction
### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction

Build Summary

Top model targets built:

Model                                       Action                       Rebuild Reason                                    
===========================================================================================================================
rtwdemo_float_mul_for_net_slope_correction  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 10.139s

4. Смотрите сгенерированный rtwdemo_float_mul_for_net_slope_correction_step ступенчатая функция в rtwdemo_float_mul_for_net_slope_correction.c.

/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
  /* DataTypeConversion: '<Root>/Data Type Conversion' incorporates:
   *  Inport: '<Root>/Input'
   */
  if (rtU.Input < 256.0F) {
    if (rtU.Input >= 0.0F) {
      /* Outport: '<Root>/Output' */
      rtY.Output = (uint8_T)rtU.Input;
    } else {
      /* Outport: '<Root>/Output' */
      rtY.Output = 0U;
    }
  } else if (rtU.Input >= 256.0F) {
    /* Outport: '<Root>/Output' */
    rtY.Output = MAX_uint8_T;
  } else {
    /* Outport: '<Root>/Output' */
    rtY.Output = 0U;
  }

  /* End of DataTypeConversion: '<Root>/Data Type Conversion' */
}

Генератор кода применяет условие сопоставить NaN к нулю interger. В этом случае сгенерированный код больше, но результаты соответствия сгенерированного кода с результатами симуляции.

Сгенерируйте код с оптимизацией

1. Откройте диалоговое окно Configuration Parameters.

2. На панели Оптимизации выберите код Remove от с плавающей точкой до целочисленных преобразований с насыщением, которое сопоставляет NaN, чтобы обнулить параметр.

3. Создайте модель.

### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction
### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction

Build Summary

Top model targets built:

Model                                       Action                       Rebuild Reason                   
==========================================================================================================
rtwdemo_float_mul_for_net_slope_correction  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 8.5799s

4. Смотрите сгенерированный rtwdemo_float_mul_for_net_slope_correction_step ступенчатая функция с оптимизацией в rtwdemo_float_mul_for_net_slope_correction.c.

/* Model step function */
void rtwdemo_float_mul_for_net_slope_correction_step(void)
{
  /* DataTypeConversion: '<Root>/Data Type Conversion' incorporates:
   *  Inport: '<Root>/Input'
   */
  if (rtU.Input < 256.0F) {
    if (rtU.Input >= 0.0F) {
      /* Outport: '<Root>/Output' */
      rtY.Output = (uint8_T)rtU.Input;
    } else {
      /* Outport: '<Root>/Output' */
      rtY.Output = 0U;
    }
  } else {
    /* Outport: '<Root>/Output' */
    rtY.Output = MAX_uint8_T;
  }

  /* End of DataTypeConversion: '<Root>/Data Type Conversion' */
}

Сгенерированный код сопоставляет NaN к 255 и не целочисленный нуль. Сгенерированный код более эффективен без дополнительного кода, который сопоставляет NaN с целочисленным нулем. Но возможно, что выполнение сгенерированного кода не приводит к тем же результатам как симуляция для NaN значения.

Смотрите также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте