为什么Polyspace代码验证显示一个函数返回一个值与全系列似乎忽视DRS R2018b变量约束?

5视图(30天)
我用Polyspace代码验证一些C代码,我看到一个函数返回的全方位分析变量类型(浮动)虽然我相信应该限制在范围内我在DRS(数据范围规范)设置文件的函数参数。为什么会这样?
这是我的示例C代码函数签名:
FUNC (float32) foo (const布尔boolVarOne const挥发性float32 * floatVarOne, const挥发性float32 * floatVarTwo)
当这些参数限制在DRS文件中,我希望我的函数只能输出之间[-10.0,10.0]。但是我看到一个浮点数的全部而不是被称为当我看着我的函数实现这些约束参数。

接受的答案

MathWorks支万博1manbetx持团队
有两个原因你看到这个意想不到的行为。
首先,Polyspace代码验证是一个静态分析器不分析每个调用的函数,而是使用抽象建模。多次函数“foo”被称为源代码与不同的上下文(即不同的参数值)。这意味着Polyspace将合并所有上下文时,它将分析函数“foo”。副作用会导致返回全部只要一个调用中多次被称为全方位参数。选择“内联”帮助Polyspace分别考虑每个调用(“内联foo”)。有关更多信息,请参考以下文档页面:
第二,两个参数与函数相关的“foo”原型是“不稳定”。一旦Polyspace代码验证认为一个变量或参数不稳定,全程值总是认为它即使约束添加到DRS文件。更多信息请参阅以下文档页面代码如何验证与volatile变量,可以改变没有写操作。
如果删除volatile关键字函数的两个参数和重启Polyspace代码验证“内联”选项,它将帮助Polyspace代码验证更精确。后来,范围由函数返回“foo”感兴趣的线应与你的期望。

更多的答案(0)