Укажите, как генератор кода формирует типы данных для переменных.
Категория: Создание кода > Стиль кода
По умолчанию: 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 Rule 10.1, так как выбран параметр конфигурации модели Replace multifications by power of two со сдвигом со знаком bitwise. Дополнительные сведения см. в разделе Замена умножения на степени двух со знаком побитовых сдвигов.
В зависимости от настройки, конфигурационный параметр Casting modes может заменять побитовые операции XOR реляционными операциями в сгенерированном коде, чтобы удовлетворить MISRA C:12 Rule 10.1, когда операнды являются подписанными типами. Например, создайте код из следующей модели с режимами литья, равными 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 (^) над этими операндами нарушает правило C:12 MISRA 10.1. Чтобы предотвратить это нарушение, генератор кода заменяет побитовую операцию XOR (^) неравенством (! =) в генерируемом коде, если для режимов литья установлено значение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' |
| Приложение | Настройка |
|---|---|
| Отладка | Никакого воздействия |
| Отслеживаемость | Никакого воздействия |
| Эффективность | Никакого воздействия |
| Меры безопасности | Никакого воздействия |