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 的支持。