提问人:Ivan 提问时间:7/20/2021 最后编辑:Ivan 更新时间:7/20/2021 访问量:110
MISRA 检查器错误 将指针传递给函数后进行推断
MISRA checker wrong Inferring after passing pointer to function
问:
在我的项目中的某个地方,我有这样的代码:
{
uint8_t u8Integer = 0xFFU;
returnCode = someFucntion(&u8Integer);
uint8_t u8Decimal = 0xFFU;
returnCode = someOtherFucntion(&u8Decimal);
uint16_t u16Temp = ((static_cast<uint16_t>(u8Integer) << 8U) | static_cast<uint16_t>(u8Decimal));
if(u16Temp <= 0xC000) // Problem here
{
// Uneracahble Code ?
}
else // {...}
}
和签名都如下所示:someFucntion
someOtherFucntion
int8_t someFucntion(uint8_t * pu8Data) const;
int8_t someOtherFucntion(uint8_t * pu8Data) const;
自动 MISRA 静态检查会抛出一个错误,指出该语句永远不会为真。
我猜是因为在将他们的指针传递给 and 时修改了 and,检查器假设它们静止不动,因此永远不会改变,使它成为 alwas.if
u8Decimal
u8Integer
someFucntion
someOtherFucntion
0xFF
u16Temp
> 0xC000
当我运行这个程序时,值会正确更改(有时输入语句,有时不输入)。u16Temp
if
检查器显示“u16Temp 的推断值为 65535”
这只是检查器不能完美工作的情况吗?还是我真的有代码问题?
我尝试将变量设置为,但这不起作用。volatile
答: 暂无答案
评论
&u8Integer
u8Integer
someFunction
someFunction(uint8_t& foo)
nullptr
8U
uint16_t
8U
const uint16_t shift_quantity = 8U;