Задайте, как генератор кода выводит типы данных для переменных.
Category: Генерация кода > Стиль кода
По умолчанию: 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; }
Сгенерируйте код, где литье типов данных соответствует 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
не соответствует MISRA C:12 правилу 10.1, потому что выбран параметр конфигурации <reservedrangesplaceholder0> модели. Для получения дополнительной информации смотрите Заменить умножения на степени двойки на подписанные побитовые сдвиги.
В зависимости от настройки, параметр конфигурации <reservedrangesplaceholder2> могут заменять побитовые операции XOR реляционными операциями в сгенерированном коде, чтобы удовлетворить MISRA C:12 Rule 10.1, когда операнды являются типами со знаком. Например, сгенерируйте код из следующей модели с набором 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 C:12 MISRA. Чтобы предотвратить это нарушение, генератор кода заменяет побитовую операцию XOR (^) на неравенство (! =) в сгенерированном коде, когда Casting modes установлено на Standard compliant
.Сгенерируйте код, который явно выводит значения типов данных.
Для примера:
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' |
Приложение | Настройка |
---|---|
Отладка | Никакого влияния |
Трассируемость | Никакого влияния |
Эффективность | Никакого влияния |
Меры безопасности | Никакого влияния |