我想缩短我的代码,代码的目的是控制步进电机.我想要保持步数(32 bits)和旋转频率(16 bits).我通过一条总线以102格式接收此信息.我的 idea 是不必将每一位乘以256/65535.来补齐步数和频率.我可以通过unions 做到这一点,但我也想拥有多个马达,所以我决定宣布一个 struct ,让unions 参与其中.它不断地给我错误,所以我显然是做错了什么.
我认为声明 struct 中的联合不是问题,因为联合占用的内存空间等于它最大的成员,它们可能是 struct 元素似乎是合理的.以下是一段代码片段:
struct Stepper_Motor
{
union Num_Steps
{
uint32_t Sum_Steps;
uint8_t Arr_Steps[4];
};
union Rotation_freq
{
uint16_t Sum_Freq;
uint8_t Arr_Freq[2];
};
uint8_t State;
};
当我在声明 struct 成员后try 访问它时,当我写下其中一个成员时,IDE会给我一个 struct 成员的列表:
```
struct Stepper_Motor Motor1,Motor2,Motor3;
//Some code... //
Motor1.Arr_Freq[0] = something; // this gives me an error, "no members named Arr_Freq"
```
我还try 了以下几种方法:
Motor1.Rotation_freq.Arr_Freq[0] = something; //error
有没有可能做我想做的事?我是否必须在 struct 外声明unions ,然后在 struct 内引用它们,如果是,如何引用?这是一种使用联合的虚假方式,以省go 编写乘法吗?