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

Используйте блоки «Inport», «Outport» и «Data Type Conversion» для создания модели примера.
Откройте диалоговое окно «Параметры блока ввода» и перейдите на вкладку «Атрибуты сигнала». Для параметра «Тип данных» выберите double.
Откройте диалоговое окно «Преобразование типа данных». Для параметра Тип выходных данных выберите uint8.
Выберите Насыщение при переполнении целого числа. Выбор этого параметра указывает, что значение сигнала вне диапазона равно минимальному или максимальному значению, которое может представлять тип данных.
Для сигнала, подаваемого в блок преобразования типа данных, откройте диалоговое окно «Свойства сигнала». Введите имя U. В редакторе сопоставлений кодов в разделе «Сигналы» установите класс хранения в значение ImportedExtern.
Для сигнала, выходящего из блока «Преобразование типа данных», откройте диалоговое окно «Свойства сигнала». Введите имя Y. В редакторе сопоставлений кодов в разделе «Сигналы» задайте для класса хранения значение ImportedExtern.
Задайте для параметров конфигурации > Решатель > Параметры решателя > Тип параметра значение Fixed-step.
Отключить параметры конфигурации > Оптимизация > Дополнительные параметры > Удалить код из преобразования с плавающей запятой в целое с насыщением, которое сопоставляет NaN нулевому параметру.
Включите параметры конфигурации > Создание кода > Отчет > Создать параметр отчета о создании кода и параметр Открыть отчет автоматически.
Включите параметр Параметры конфигурации > Создание кода > Процесс построения > Создать только код. Затем в окне модели нажмите клавиши CTRL + B. По завершении создания кода открывается отчет о создании кода HTML.
В отчете Создание кода выберите nan_int_ex.c и просмотрите функцию шага модели. Для входного значения NaN, существует согласие между сгенерированным кодом и моделированием, поскольку NaN соответствует целому нулю.
/* Model step function */
void nan_int_ex_step(void)
{
/* DataTypeConversion: '<Root>/Data Type Conversion' incorporates:
* Inport: '<Root>/In1'
*/
if (U < 256.0) {
if (U >= 0.0) {
Y = (uint8_T)U;
} else {
Y = 0U;
}
} else if (U >= 256.0) {
Y = MAX_uint8_T;
} else {
Y = 0U;
}
Включить параметры конфигурации > Оптимизация > Создание кода > Целое число и фиксированная точка > Удалить код из преобразования с плавающей запятой в целое число, который включает параметр значений вне диапазона. Создать код.
В отчете Создание кода выберите nan_int_ex.c и просмотрите функцию шага модели. Созданные карты кодов NaN до 255, а не целого нуля. Созданный код эффективнее без дополнительного кода, который сопоставляется NaN до целого нуля, но выполнение сгенерированного кода не дает тех же результатов, что и моделирование для NaN значения.
/* Model step function */
void nan_int_ex_step(void)
{
/* DataTypeConversion: '<Root>/Data Type Conversion' incorporates:
* Inport: '<Root>/In1'
*/
if (U < 256.0) {
if (U >= 0.0) {
Y = (uint8_T)U;
} else {
Y = 0U;
}
} else {
Y = MAX_uint8_T;
}
/* End of DataTypeConversion: '<Root>/Data Type Conversion' */