主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

强制转换模式

变量数据类型转换方法

模型配置窗格: 代码生成 / 代码样式

描述

指定代码生成器如何转换变量的数据类型。

设置

名义 (默认) | 符合标准 | 显式

默认值:名义

名义

生成使用默认 C 编译器数据类型转换的代码。此设置删除了不必要的类型转换,这可能会导致需要显式转换的编译器发出警告。

符合标准

生成数据类型转换符合 MISRA™ 标准的代码。

强制转换模式设置为符合标准可以将生成的代码中的按位异或运算替换为关系运算,以满足操作数为有符号类型时的 MISRA C:12 Rule 10.1。

显式

生成明确转换数据类型值的代码。

示例

全部展开

当将强制转换模式设置为不同的值时,比较生成的代码中的数据类型转换。

这是使用默认强制转换模式名义生成的代码:

void EmbeddedCoderIntro_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;
     }

以下是将强制转换模式设置为符合标准后生成的相同代码:

void EmbeddedCoderIntro_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,因为选择了模型配置参数将二次幂的乘法替换为有符号按位移位。有关详细信息,请参阅将二次幂的乘法替换为有符号按位移位

根据设置,配置参数强制转换模式可以将生成的代码中的按位异或运算替换为关系运算,以满足操作数为有符号类型时的 MISRA C:12 Rule 10.1。例如,从以下模型生成代码,将强制转换模式分别设置为 NominalStandard compliant

Bitwise XOR block with two inputs and one output.

// 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.In1rtU.Inport1 是单符号类型。对这些操作数执行按位 XOR(^) 运算违反了 MISRA C:12 Rule 10.1。为了防止这种违规,当强制转换模式设置为 Standard compliant 时,代码生成器会在生成的代码中将按位 XOR(^) 运算替换为不等式 (!=)。

以下是将强制转换模式设置为显式后生成的相同代码:

void EmbeddedCoderIntro_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'

版本历史记录

在 R2014b 中推出