Arduino:无法通过gcc编译器将union struct作为指针交流传递

我正在尝试使用Arduino结构但不能通过函数调用传递结构指针。 添加主要function并使用gcc为我的计算机编译时,一切正常,但使用Arduino IDE,我得到错误。

我试过的代码是:

typedef union { struct { unsigned unit :2; unsigned channel:2; unsigned status :1; unsigned group :1; unsigned remote :26; }; unsigned long data; } Signal; Signal signal; void testPassingStruct(Signal *variable) { variable->status = 1; } void setup() { signal.status = 1; testPassingStruct(&signal); } void loop() { } 

错误是:

 structtest:2: error: variable or field 'testPassingStruct' declared void structtest:2: error: 'Signal' was not declared in this scope structtest:2: error: 'variable' was not declared in this scope 

你有几个未命名的项目。 这种情况发生在typedef 。 你可以试试,

 union sig_union { struct { unsigned unit :2; unsigned channel:2; unsigned status :1; unsigned group :1; unsigned remote :26; } d; /* Note the name here. */ unsigned long data; } signal; typedef union sig_union Signal; 

然后在您需要的代码中,

 void testPassingStruct(Signal *variable) { variable->d.status = 1; } 

您还可以使用掩码和位字段的定义。 通常它会控制哪个位更清晰,编译器会在两种情况下生成类似的代码。 例如,

 #define SIG_UNIT(d) (d&0x3) #define SIG_CHANNEL(d) (d&0xc>>2) #define SIG_STATUS(d) (d&0x10) /* etc. */ 

特别是对于位重要的系统编程,这是更好的,因为我不相信’C’位字段指定它们的放置方式。 最重要的是,我相信它会编译。

它基本上是联合和缺少结构成员的名称(我在下面的代码中称它为部分)。 试试这个

 union Signal { struct { unsigned unit :2; unsigned channel:2; unsigned status :1; unsigned group :1; unsigned remote :26; } parts; unsigned long data; }; union Signal signal; void testPassingStruct(union Signal *variable) { variable->parts.status = 1; } void setup() { signal.parts.status = 1; testPassingStruct(&signal); } void loop() { }