我正在尝试将结构与 Arduino 一起使用,但无法通过函数调用传递结构指针。添加主要功能并使用 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”位字段指定它们的放置方式。最重要的是,我相信它会编译。
关于c - Arduino:无法将 union 结构作为指针 ac 传递,我可以使用 gcc 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055234/