You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决MISRA 2012 Rule 2.2违规:逻辑运算结果恒为false问题

解决QAC触发的MISRA违规:“该逻辑运算的结果始终为false”

问题根源

你遇到的违规是因为RISING和NON_INV两个STM32H7官方宏的定义值完全相同(均为0X00000000U),导致代码中pol == RISING || pol == NON_INV的判断逻辑冗余——本质上是重复判断同一个值。QAC的MISRA规则将这种冗余逻辑误报为“逻辑运算结果始终为false”。

解决方案

针对这个问题,有两种简洁且符合MISRA规范的修复方式:

1. 移除冗余的重复判断

直接删除其中一个等价的条件判断,保留任意一个即可,因为两者的校验逻辑完全一致:

bool IsTimClockPolarity(uint32_t pol)
{
    bool result = false;
    if ((pol == RISING) || (pol == FALLING) || (pol == INV) || (pol == BOTH_EDGE))
    {
        result = true;
    }
    return result;
}

2. 使用switch-case替代条件判断

switch-case结构更清晰,能避免QAC对冗余逻辑的误判,同时更符合嵌入式代码的MISRA风格,还能完整保留所有官方宏的引用:

bool IsTimClockPolarity(uint32_t pol)
{
    bool result = false;
    switch (pol)
    {
        case RISING:
        case NON_INV:
        case FALLING:
        case INV:
        case BOTH_EDGE:
            result = true;
            break;
        default:
            result = false;
            break;
    }
    return result;
}

内容的提问来源于stack exchange,提问作者Vincenzo Cristiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:36:58