将指针传递给函数后,MISRA 检查器错误推断

问题描述

在我的项目中的某个地方,我有这个代码

  {
    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 // {...}
  }

someFucntionsomeOtherFucntion 签名如下所示:

 int8_t someFucntion(uint8_t * pu8Data) const;
 int8_t someOtherFucntion(uint8_t * pu8Data) const;

自动 MISRA 静态检查会引发错误,指出 if 语句永远不会为真。 我猜是因为 u8Decimalu8Integer 在将它们的指针传递给 someFucntionsomeOtherFucntion 时被修改,并且检查器假定它们仍然是 0xFF,因此 {{ 1}} 永远不会改变,使它永远是 u16Temp .

当我运行此程序时,> 0xC000 的值会正确更改(有时输入 u16Temp 语句,有时不输入)。

检查器说“u16Temp 的推断值为 65535”

这只是检查器工作不正常的情况吗?还是我真的有代码问题?

我尝试将变量设置为 if 但这没有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)