我正在使用CCS8,使用一个结构并初始化vars,如下面的代码所示。CCS在第15、16和17行给出了如下评论:
#1546-D:(ULP 15.1)检测到连续的位字段分配。建议改用位掩码
我真的不明白在这种情况下使用位掩码会有什么好处。我认为这句话是一个更普遍的东西,只在奇怪的边缘情况下起作用这一理论在某种程度上得到了this question on E2E的支持。
附加代码:

#include <msp430.h>

typedef struct
{
    unsigned char var1;
    unsigned int var2;
    unsigned char var3;
    unsigned char var4;
} Test;

void main ( void )
{
    Test BOB;
    BOB.var1 = 1;
    BOB.var2 = 1;
    BOB.var3 = 3;
    BOB.var4 = 1;
}

我真的很想理解这句话,这样我就可以相应地改变我的编码习惯,如果这能防止将来可能出现的问题的话。
提前感谢您的反馈/回答。

最佳答案

编辑:我很确定这是一个错误,你应该认为这是一个假阳性。查看底部的链接。
我看不到你粘贴的代码中的任何位字段?
如果代码是这样的话就有意义了:


struct s
{
  char a : 4;
  char b : 4;
};

int main()
{
  struct s S;
  S.a = 0;
  S.b = 0;

  return 0;
}

我在德州仪器的论坛上注意到这些关于同一警告的貌似误报报道:https://e2e.ti.com/support/tools/ccs/f/81/t/317480?ULP-15-1-Question
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/317382?ULP-15-1-Question
我知道他们很老了,但除非你用的是最新版本的CCS,否则这可能是假阳性?

08-19 13:35