Кастинг режимов

Описание

Задайте, как генератор кода бросает типы данных для переменных.

Генерация кода Category:> Стиль кода

Настройки

Значение по умолчанию: Nominal

Nominal

Сгенерируйте код, который использует кастинг типа данных компилятора C по умолчанию.

Например:

void rtwdemo_rtwecintro_step(void)
  {
    boolean_T rtb_equal_to_count;
    rtDWork.X++;
    rtb_equal_to_count = (rtDWork.X != 16);	
    if (rtb_equal_to_count && (rtPrevZCSigState.Amplifier_Trig_ZCE != POS_ZCSIG))
     { rtY.Output = rtU.Input << 1;
     }

Standards Compliant

Сгенерируйте код, где кастинг типа данных выполняет стандарты MISRA®.

Например:

void rtwdemo_rtwecintro_step(void)
	{
	  boolean_T rtb_equal_to_count;
	  rtDWork.X = (uint8_T)((uint32_T)rtDWork.X + 1U);
	  rtb_equal_to_count = ((int32_T)rtDWork.X != 16);
	  if (rtb_equal_to_count && ((uint32_T)rtPrevZCSigState.Amplifier_Trig_ZCE !=
	       POS_ZCSIG)) {
	    rtY.Output = rtU.Input << 1U;
	  }
  

Примечание

Выражение rtY.Output = rtU.Input << 1U несовместимо с Правилом 10.1 MISRA C:12, потому что параметр конфигурации модели Replace multiplications by powers of two with signed bitwise shift выбран. Для получения дополнительной информации смотрите умножение Замены степенями двойки с поразрядными сдвигами со знаком.

В зависимости от установки параметр конфигурации Casting modes может заменить поразрядные операции "исключающее ИЛИ" на реляционные операции в сгенерированном коде, чтобы удовлетворить Правилу 10.1 MISRA C:12, когда операнды подписываются типы. Например, сгенерируйте код из следующей модели с набором Casting modes к Nominal и Standard compliant соответственно.

// Model step function (casting mode set to Nominal)
void step(void)
{rtY.Out3 = (boolean_T)((int32_T)(rtU.In1 != 0.0F) ^ (int32_T)(rtU.Inport1 !=
    0.0F));
}
// Model step function (Casting modes set to Standard Compliant)
void step(void)
{  rtY.Out3 = ((rtU.In1 != 0.0F) != (rtU.Inport1 != 0.0F));
}
Здесь, параметры rtU.In1 и rtU.Inport1 один подпалившие типы. Выполнение поразрядного XOR (^) операция на этих операндах нарушает Правило 10.1 MISRA C:12. Чтобы предотвратить это нарушение, генератор кода заменяет поразрядный XOR (^) операция с неравенством (! =) в сгенерированном коде, когда Casting modes установлен в Standard compliant.

Explicit

Сгенерируйте код, который бросает значения типа данных явным образом.

Например:

void rtwdemo_rtwecintro_step(void)
   {
    boolean_T rtb_equal_to_count;
    rtDWork.X = (uint8_T)((uint32_T)(int32_T)rtDWork.X + 1U);
    rtb_equal_to_count = (boolean_T)((int32_T)rtDWork.X != 16);
    if (((int32_T)rtb_equal_to_count) && ((int32_T)
    rtPrevZCSigState.Amplifier_Trig_ZCE != (int32_T)POS_ZCSIG)) {
    rtY.Output = rtU.Input << 1;
	  }
  

Информация о командной строке

Параметр: CastingMode
Ввод: символьный вектор
Значение: 'Nominal' | 'Standards' | 'Explicit'
Значение по умолчанию: 'Nominal'

Рекомендуемые настройки

ПриложениеУстановка
ОтладкаНикакой удар
ТрассируемостьНикакой удар
ЭффективностьНикакой удар
Меры безопасностиНикакой удар

Похожие темы