如何在不违反MISRA规则的情况下将位域变量分配给uint8_t变量?

问题描述 投票:1回答:2

我有一个名为typedef struct的角色。

typedef struct {
    unsigned int a : 1;
    unsigned int b : 1;
    unsigned int c : 1;
    unsigned int d : 1;
    unsigned int o : 1;
    unsigned int p : 1;
    unsigned int q : 1;
    unsigned int x : 1;
} Character;

static Character tempChar;

void writeVar(const uint8_t *pData)
{
    tempChar.a = pData[0] >> 5;
    ...
}

[当我尝试将uin8_t变量(值01)分配给这些位字段之一时,我违反了MISRA规则10.6,其中指出:]]

复合表达式的值不得分配给基本类型较宽的对象

是否可以在不违反MISRA C的情况下为uint8_t分配位字段?

我有一个名为Character的typedef结构。 typedef struct {unsigned int a:1;无符号整数b:1; unsigned int c:1; unsigned int d:1;无符号整数o:1; unsigned int p:...

c bit-fields misra uint8t
2个回答
0
投票

由于这个原因,我发现MISRA C过于复杂。无论如何,您并不是说要直接分配它。在这种情况下,您可以采取以下措施:


0
投票

如果需要,表达式pData[0] >> 5中的两个操作数都将是promotedint(对于pData[0]将会发生)。

© www.soinside.com 2019 - 2024. All rights reserved.