我想缩短我的代码,该代码的目的是控制步进电机。我想保存步数(32 位)和旋转频率(16 位)。我通过总线以uint8_t格式接收此信息。我的想法是不必将每个位乘以 256/65535.... 来弥补步长和频率。我可以使用联合来做到这一点,但我也想要有多个电机,所以我决定为此声明一个结构并将联合放在里面。它一直给我错误,所以我显然做错了一些事情。
我预计在结构内部声明联合不会成为问题,因为联合占用的内存空间等于其最大成员,它们可能是结构元素似乎是合理的。这是一个代码片段:
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;
};
Run Code Online (Sandbox Code Playgroud)
当我在声明结构体成员后尝试访问它时,当我写下其中一个成员时,IDE 会为我提供该结构体成员的列表:
```
struct Stepper_Motor Motor1,Motor2,Motor3;
//Some code... //
Motor1.Arr_Freq[0] = something; // this gives me an error, "no members named Arr_Freq"
```
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下方法:
Motor1.Rotation_freq.Arr_Freq[0] = something; //error
Run Code Online (Sandbox Code Playgroud)
甚至可以做我想做的事吗?我是否必须在结构外部声明联合,然后在结构内部引用它们,如果是这样,怎么做?这是使用联合来节省编写乘法的虚假方法吗?