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

Используйте блоки «Inport», «Outport» и «Data Type Conversion» для создания модели примера.
Откройте диалоговое окно Inport Block Parameters и перейдите на вкладку Signal Attributes. Для параметра «Тип данных» выберите double.
Откройте диалоговое окно «Преобразование типа данных». Для параметра Тип выходных данных выберите uint8.
Откройте приложение Simulink Coder. Если у вас есть лицензия Embedded Coder, откройте приложение Embedded Coder.
Выберите Интерфейс кода > Сопоставления кодов отдельных элементов.
На вкладке Сопоставления кода - C > Inports установите класс хранения в значение ImportedExtern.
В разделе «Код» инспектора свойств присвойте идентификатору имя, например Inport.
На вкладке Сопоставления кодов-C > Выходы установите класс хранения в значение ImportedExtern.
В разделе «Код» инспектора свойств присвойте идентификатору имя, например Outport.
Откройте диалоговое окно «Параметры конфигурации». На панели «Решатель» для параметра «Тип» выберите Fixed-step.
На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.
На панели Создание кода (Code Generation) выберите Только генерировать код (Generate code only), а затем в окне модели нажмите клавиши Ctrl + B. По завершении создания кода открывается отчет о создании кода HTML.
В отчете Создание кода выберите conversion_ex.c и просмотрите функцию шага модели. Генератор кода применяет fmod для обработки результатов вне диапазона.
void conversion_ex_step(void)
{
real_T tmp;
/* DataTypeConversion: '<Root>/Data Type Conversion' incorporates:
* Inport: '<Root>/Input'
*/
tmp = floor(Inport);
if (rtIsNaN(tmp) || rtIsInf(tmp)) {
tmp = 0.0;
} else {
tmp = fmod(tmp, 256.0);
}
/* Outport: '<Root>/Out1' incorporates:
* DataTypeConversion: '<Root>/Data Type Conversion'
*/
Outport = (uint8_T)(tmp < 0.0 ? (int32_T)(uint8_T)-(int8_T)(uint8_T)-tmp :
(int32_T)(uint8_T)tmp);
}Откройте диалоговое окно «Параметры конфигурации». На панели Оптимизация (Optimization) выберите Удалить код из преобразования с плавающей запятой в целое, которое переносит значения вне диапазона. Создать код.
В отчете о создании кода выберите conversion_ex.c и просмотрите функцию шага модели. Созданный код не содержит код, защищающий от значений вне диапазона.
void conversion_ex_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
* DataTypeConversion: '<Root>/Data Type Conversion'
* Inport: '<Root>/Input'
*/
Outport = (uint8_T)Inport;
}Сгенерированный код является более эффективным без этого защитного кода, но возможно, что выполнение сгенерированного кода не дает тех же результатов, что и моделирование для значений, не находящихся в диапазоне от 0 до 255.