小编Ale*_*kov的帖子

是否可以在 C 结构体内部声明联合?

我想缩短我的代码,该代码的目的是控制步进电机。我想保存步数(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)

甚至可以做我想做的事吗?我是否必须在结构外部声明联合,然后在结构内部引用它们,如果是这样,怎么做?这是使用联合来节省编写乘法的虚假方法吗?

c embedded struct unions

5
推荐指数
2
解决办法
123
查看次数

标签 统计

c ×1

embedded ×1

struct ×1

unions ×1