内部配列のパディングが、私は以下のようにコードを持っている:C・ユニオン、構造体
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
}
PSの定義のように見えるどのようにすべきである: __ioは
揮発してくださいアドバイスだけのマクロです。
注値にヘッダーは各ビットに個別の定義を提供するので、各フィールドの開始位置を知る必要はありません。したがって、MODER9フィールドのビットを設定する必要がある場合、 'GPIO_MODER_MODER9_0'と' GPIO_MODER_MODER9_1'のような定義があります。すべてのレジスタでこの標準に従います。さらに、ヘッダの新しいバージョンは '... Pos'マクロにフィールドのビット位置を与えます。例えば、STM32F0ヘッダの' GPIO_MODER_MODER9_Pos'です。 –
はい、私はstm32f411xe.hの内部にこのBITSの定義があることに注意しますが、私はGPIO_MODER_MODER9_Posを使ってこの新しいバージョンのマクロを好んでいます。私はこの新しいバージョンについて知りませんでした。ありがとう! C++テンプレートとstd:bitsetを使ってこの解決策についてどう思いますか? –
あまりにも少ない利益のために働くには - 私の意見では(;私はC++では、最低レベル以上のレベルのteレジスタを使用して、いくつかの高水準インターフェースを使用すべきだと考えています。とにかく、あなたが 'GPIOA-> MODER_REG.bit.MODER [0] = 0x2;'または 'gpioSetModer(GPIOA、0、0x02);を使用するかどうかはフォーマットの相違だけではありません(私の意見では - –