Main Content

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

S-Function 和 C/C++ 代码的支持限制和注意事项

Simulink Design Verifier 中启用 S-Function

Simulink® Design Verifier™ 支持使用 Embedded Coder® 生成的代码的测试用例生成。 Simulink Design Verifier 还支持以下 S-Function 的错误检测、测试用例生成和属性证明:

  • 传统代码工具生成,其中 def.Options.supportCoverageAndDesignVerifier 设置为 true。

  • 生成 S-Function Builder,并在S-Function Builder 对话框的 编译信息 选项卡上选择 启用对 Design Verifier 的支持

  • 函数 slcovmex 进行编译,并在编译S-Function时将选项 -sldv 传递给该函数。

有关这三种方法的更多信息,请参阅 About C MEX S-Functions

S-Function 和 C/C++ 代码的支持限制

  • Simulink Design Verifier 不支持包含以下内容的 S-Function 或 C/C++ 代码:

    • 连续状态。Simulink Design Verifier不分析此类代码。

    • 零交叉函数。Simulink Design Verifier 在分析过程中会忽略此类代码。

    • 描述 INF 或 NaN 对象的常量。Simulink Design Verifier 认为此类代码包含浮点溢出错误。尽管Simulink Design Verifier分析无法确定此类情况下的溢出错误类型,但分析可以确定哪些代码行导致了不兼容性。Polyspace® 可以提供有关您的代码为何包含浮点溢出错误的更多信息。

  • 您必须指定进入使用 slcovmex 编译的 S-Function 端口的信号元素是连续的。使用 SimStruct 函数 ssSetInputPortRequiredContiguous

Simulink Design Verifier 支持S-Function和 C/C++ 代码的以下设计错误:

  • 死逻辑包括活动逻辑。

  • 数组超出范围。这包括 C/C++ 情况下的指针越界。

  • 被零除。

将 Volatile 变量作为普通变量处理

Simulink Design Verifier 允许将易失性变量桩件或作为普通变量处理。当您选择忽略 volatile 限定符参数时,挥发性元素将与非挥发性元素同样处理。取消选择 忽略 volatile 限定符 将恢复到之前对易失性元素的桩件访问的行为。

Simulink Design Verifier 中启用 S-Function 和 C/C++ 代码的注意事项

  • 在对启用了 S 函数的模型或使用 Embedded Coder 生成的 C/C++ 代码执行属性证明或测试生成分析时,Simulink Design Verifier 假定代码不包含运行时错误。如果代码包含运行时错误(例如除以零、访问未初始化的变量或数组越界),则属性证明或测试生成分析可能会产生不正确的结果。已经过 Polyspace 检查且没有运行时错误的代码在 Simulink Design Verifier 分析中提供正确的结果。

    为了避免由于运行时错误而产生不正确的结果,请首先进行设计错误检测分析,然后进行属性证明或测试生成分析。

  • 如果 Simulink Design Verifier 无法确定代码中数组的大小(例如,对于动态分配的非恒定大小的数组),Simulink Design Verifier 会为该数组假定一个上限。确保给定的上限是合适的。

  • 如果您没有启用 Simulink Design Verifier 对S-Function的支持,则 Simulink Design Verifier 会桩件S-Function。启用S-Function支持后,Simulink Design Verifier 分析了S-Function的内容以获取更详细的信息。有时,Simulink Design Verifier 会在内部桩件S-Function。内部桩件可以是不同 C/C++ 构造的结果,例如:

    • 调用库函数(库函数被桩件替换)。

    • 复杂的指针操作。

    • 转换为不兼容或未知的指针类型或从不兼容或未知的指针类型转换。

    包含此类构造的模型被标记为 部分兼容

源代码保护

为了分析S-Function的内容,有关S-Function实现的信息(包括从源代码获取的信息)都存储在共享对象中。虽然用户无法直接访问这些信息,但如果 S-Function 包含敏感源代码,请考虑在外部发布的模型中禁用 Simulink Design Verifier 对 S-Function 的支持。

另请参阅

|