允许生成符合 MISRA C 标准的代码

您可以使用两个支持 MISRA C 的解决方案,即对象执行框架 (OXF) 和 MicroC-MXF 解决方案。

关于此任务

对于 Rhapsody® OXF 解决方案:
  • 如果对 IBM® Rational® Rhapsody® 模型添加了 MISRA C 设置和 MISRA C 类型,那么可以生成符合 MISRA C 标准的代码。
对于 Rhapsody MicroC-MXF 解决方案:
  • 可以通过将 MicroC-MXF 与 IBM® Rational® Rhapsody®-C 模型配合使用来生成符合 MISRA C 标准的代码。

本文档描述有关 MicroC-MXF 与最新 Rational® Rhapsody 版本的 MISRA-98MISRA-2004 一致性的当前评估。

过程

  1. 创建 MicroC 项目并开发应用程序。MicroC 已包含各种与 MISRA C 相关的类型和设置。
  2. 您不应添加 MISRA C 设置或 MisraTypes 包。在 MicroC 中,内置了 MISRA 设置。

下一步做什么

注: 必须避免使用下列建模构造才能生成符合 MISRA 标准的代码:
对于 MicroC 和 MISRA C:
  • 具有不受限多重性(例如“*”)的关系。
  • 在运行时对动态内存分配和实例化的使用。
仅限于 MicroC:
  • RiCString、RiCMap、RiCStack、RiCCollection、RiCMemoryManager 和 MemAlloc,使用下列属性实现:
    • CG::Framework::RiCStack = "Exclude"
    • CG::Framework::RiCMap = "Exclude"
    • CG::Framework::RiCList = "Exclude"
    • CG::Framework::RiCCollection = "Exclude"
  • 对快速端口的使用:使用 CG::Framework::RapidPorts = "NO_RAPID_PORTS" 属性实现。
  • 对“IS_IN”和“IS_COMPLETED”状态运算符的使用,使用下列属性实现:
    • CG::Framework::RiCReactiveStateMacros = "Exclude"
    • CG::Framework::RiCReactiveGenMacros = "Exclude"
  • 通过 GUI 运算符而不是硬编码对“RiCGen”操作的使用。
  • 内联 RiCTaskEM_doExecute():通过使用 C_CG:Class::InlineActiveBaseDoExecute = "True" 属性实现。
  • 不完全符合标准的 mxf 构造:
    • RiCString:存在与 RiCString 相关联的 MISRA 违例(.c 和 h),其中的大部分是由于标准库不符合标准所致。
    • RiCMap:存在一些与 RiCMap 相关联的 MISRA 违例(.c 和 h),其中的大部分与映射排序算法的使用相关。
    • RiCStack、RiCCollection、RiCHeap 和 RiCQueue:存在与那些模块相关联的 MISRA 违例(.c 和 h)。

反馈