gpt4 book ai didi

C Union,结构内数组的填充

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:46 25 4
gpt4 key购买 nike

我有如下代码:

  struct MODER_BITS
{ __IO uint32_t MODER0:2;
__IO uint32_t MODER1:2;
__IO uint32_t MODER2:2;
__IO uint32_t MODER3:2;
__IO uint32_t MODER4:2;
__IO uint32_t MODER5:2;
__IO uint32_t MODER6:2;
__IO uint32_t MODER7:2;
__IO uint32_t MODER8:2;
__IO uint32_t MODER9:2;
__IO uint32_t MODER10:2;
__IO uint32_t MODER11:2;
__IO uint32_t MODER12:2;
__IO uint32_t MODER13:2;
__IO uint32_t MODER14:2;
__IO uint32_t MODER15:2;
};

typedef union {
__IO uint32_t all;
struct MODER_BITS bit;
}MODER_REG;

然后我就可以使用 GPIO 结构了

typedef struct
{
MODER_REG MODER_REG;
//__IO uint32_t MODER ;/*!< GPIO port mode register,
__IO uint32_t OTYPER; /*!< GPIO port output type register, */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, */
__IO uint32_t IDR; /*!< GPIO port input data register, */
__IO uint32_t ODR; /*!< GPIO port output data register, */
__IO uint32_t BSRR; /*!< GPIO port bit set/reset register, */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, */
} GPIO_TypeDef;

然后我可以像这样使用这个定义:

GPIOA->MODER_REG.bit.MODER0=0x2;

有什么方法可以在 MODER_REG 结构体中使用数组吗?像这样使用 GPIO:

GPIOA->MODER_REG.bit.MODER[0]=0x2;

应该如何定义

struct MODER_BITS{
__IO uint32_t MODER[?]:? //options
}

附言:__IO只是一个volatile的宏

请指教。

最佳答案

没有办法。 C 不允许位数组。

但是,您仍然可以使用位掩码访问原始单词:

GPIOA->MODER_REG.all = (GPIOA->MODER_REG.all)&(~3<<0)|(2<<0);

第一部分重置位置 0 的位,第二部分设置值 2。

关于C Union,结构内数组的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41914981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com