【发布时间】:2023-01-12 06:06:49
【问题描述】:
我想缩短我的代码,代码的目的是控制步进电机。我想保留步数(32位) 和旋转频率 (16位).我通过公共汽车收到这些信息uint8_t格式。我的想法是不必将每一位乘以 256/65535.... 来构成步骤和频率。我可以用联合来做到这一点,但我也想有多个电机,所以我决定为此声明一个结构,并在里面加入联合。它一直给我错误,所以我显然做错了什么。
我希望在结构内声明联合不会成为问题,因为联合占用的内存空间等于它的最大成员,它们可以是结构元素似乎是合理的。这是一个代码 sn-p:
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;
};
当我在声明后尝试访问结构成员时,当我写下其中一个成员时,IDE 会给我一个结构成员列表:
```
struct Stepper_Motor Motor1,Motor2,Motor3;
//Some code... //
Motor1.Arr_Freq[0] = something; // this gives me an error, "no members named Arr_Freq"
```
我还尝试了以下内容:
Motor1.Rotation_freq.Arr_Freq[0] = something; //error
甚至可以做我想做的事吗?我是否必须在结构外部声明联合然后在其中引用它们,如果是这样,如何?这是使用联合的虚假方式,以节省必须编写乘法吗?
【问题讨论】: