主要内容

Stateflow图注意事项

hisf_0064:对Stateflow用于改进代码遵从性的数据

ID:标题 hisf_0064:对Stateflow进行移位操作®用于改进代码遵从性的数据
描述 为了提高使用Stateflow移位操作生成的代码的符合性,不要执行:
一个

右移操作大于输入类型的位宽或负值。

B

左移操作大于输出类型的位宽或负值。

请注意

如果您遵循此指导方针和其他建模指导方针,您将增加生成符合编码标准的代码的可能性。

基本原理 避免在生成的代码中发生可能违反编码标准的移位操作。
模型顾问检查 检查使用移位操作的状态流数据(金宝app仿真软件检查)
参考文献
  • 做MB.6.3.1 - 331部分。b“高级需求准确且一致”
    做MB.6.3.2 - 331部分。b“低级要求是准确和一致的”

  • IEC 61508-3,表A.3(2)强类型编程语言
    IEC 61508-3,表A.4(3)防御性编程

  • IEC 62304, 5.5.3 -软件单元验收标准

  • ISO 26262-6,表1 (1b)语言子集的使用
    ISO 26262-6,表1 (1c)强类型的强制执行
    ISO 26262-6,表1 (1d)防御实现技术的使用

  • EN 50128,表A.4(8)强类型编程语言
    EN 50128,表A.3(1)防御性编程

先决条件 hisl_0060:提高MISRA C:2012兼容性的配置参数
最后的改变 R2017b

hisf_0065:输入类型转换操作Stateflow改进代码遵从性

ID:标题 hisf_0065:在Stateflow中进行类型强制转换操作,以提高代码遵从性
描述 在使用C动作语言的状态流图表中,使用:=防止Stateflow将整数和定点计算转换为比输入数据类型更广泛的数据类型的符号。
请注意

如果您遵循此指导方针和其他建模指导方针,您将增加生成符合编码标准的代码的可能性。

基本原理 避免生成的代码中可能违反编码标准的隐式强制转换。
模型顾问检查 检查状态流图表中的分配操作(金宝app仿真软件检查)
参考文献
  • 做MB.6.3.1 - 331部分。b“高级需求准确且一致”
    做MB.6.3.2 - 331部分。b“低级要求是准确和一致的”

  • IEC 61508-3,表A.3(2)强类型编程语言
    IEC 61508-3,表A.4(3)防御性编程

  • IEC 62304, 5.5.3 -软件单元验收标准

  • ISO 26262-6,表1 (1b)语言子集的使用
    ISO 26262-6,表1 (1c)强类型的强制执行
    ISO 26262-6,表1 (1d)防御实现技术的使用

  • EN 50128,表A.4(8)强类型编程语言
    EN 50128,表A.3(1)防御性编程

先决条件 hisl_0060:提高MISRA C:2012兼容性的配置参数
最后的改变 R2017b

中避免使用一元操作符Stateflow图表来改进代码遵从性

ID:标题 hisf_0211:防止在状态流图中使用一元操作符,以提高代码遵从性
描述 为了提高生成代码的代码遵从性:
一个

不要在无符号数据类型上使用一元减运算符。

请注意

MATLAB®C操作语言不限制对无符号表达式使用一元减操作符。

基本原理 改进生成代码的代码遵从性。
模型顾问检查 检查状态流图表中的一元操作符(金宝app仿真软件检查)
参考文献
  • 做MB.6.3.1 - 331部分。b“高级需求准确且一致”
    做MB.6.3.2 - 331部分。b“低级要求是准确和一致的”

  • IEC 61508-3,表A.3(2)强类型编程语言
    IEC 61508-3,表A.4(3)防御性编程

  • IEC 62304, 5.5.3 -软件单元验收标准

  • ISO 26262-6,表1 (1b)语言子集的使用
    ISO 26262-6,表1 (1c)强类型的强制执行
    ISO 26262-6,表1 (1d)防御实现技术的使用

  • EN 50128,表A.4(8)强类型编程语言
    EN 50128,表A.3(1)防御性编程

  • MISRA C:2012,规则10.1

最后的改变 R2017b

hisf_0213:防止被零除运算Stateflow改进MISRA C:2012符合性的图表

ID:标题 hisf_0213:防止在Stateflow图表中被零除的计算,以提高MISRA C:2012的依从性
描述 为了提高MISRA C:2012中生成的浮点和整数操作代码的符合性,请执行以下操作之一:
一个

对模型进行静态分析,证明不可能被零除

B

通过显式地在Stateflow中建模错误检查,在生成的C代码中提供运行时错误检查

C

使用代码替换库(code Replacement Libraries, CRLs)修改代码生成过程,以防止被零除

D

对于基于整数的操作,清除配置参数删除防止除法算术异常的代码

请注意

使用运行时错误检查会在生成的代码中引入额外的计算和内存开销。因此,最好使用静态分析工具来限制生成代码中的错误。

中使用设计错误检测功能金宝app®设计验证器™执行静态分析。有关更多信息,请参见静态运行时错误检测(金宝app仿真软件设计验证器).或者,如果您有Simulink设计验证器许可证,则可以使用金宝appModel Advisor检查检测除以零(金宝app仿真软件设计验证器)识别模型中被零除的错误。

如果静态分析确定代码部分可以被零除,那么将运行时保护添加到模型的该部分中(参见示例)。使用修改后的CRL或选择参数删除防止除法算术异常的代码保护除法操作而不是被零除的操作。然而,这个操作确实会带来额外的计算和内存开销。

在模型中只使用其中一个运行时保护(B、C或D)。使用多个选项可能导致冗余保护操作。

基本原理 A、B
C, D
改进MISRA C:2012生成代码的符合性
模型顾问检查 不能通过使用Model Advisor检查来验证对该建模指南的遵守。
参考文献
  • MISRA C:2012, 4.1目录

另请参阅
最后的改变 R2018a
例子

运行时除零保护可以用图形函数实现。应该为每种数据类型提供独特的函数。