首页 > 解决方案 > 原因:#1546-D:(ULP 15.1)检测到连续位域分配。建议改用位掩码

问题描述

我正在使用 CCS8,使用结构并初始化变量,如下面的代码所示。CCS 在第 15、16 和 17 行给了我注释,内容如下:

#1546-D:(ULP 15.1)检测到连续的位域分配。建议改用位掩码

我真的不明白在这种情况下使用位掩码会带来什么好处。我认为这句话是一个更普遍的事情,它只在奇怪的边缘情况下发挥作用(?)这个理论在某种程度上得到了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;
}

我真的很想理解这句话,以便我可以相应地改变我的编码习惯,如果这样可以防止将来可能出现的问题。

提前感谢您的任何反馈/答案。

标签: c

解决方案


编辑:我很确定这是一个错误,您应该将其视为误报。请参阅底部的链接。

我在您粘贴的代码中看不到任何位域?

如果代码看起来像这样,那将是有意义的:


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

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

  return 0;
}

我在 TI 的论坛上注意到这些关于同一警告的看似误报的报告: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,否则这可能是误报的情况?


推荐阅读