我正在使用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,否则这可能是假阳性?