1

マイクロコントローラーについて学習していますが、ユニオンを使用して gpio ポートの個々のビットを設定する方法を理解するのに苦労しています。

typedef union _BYTE
{
    byte _byte;
    struct
    {
        unsigned b0:1;
        unsigned b1:1;
        unsigned b2:1;
        unsigned b3:1;
        unsigned b4:1;
        unsigned b5:1;
        unsigned b6:1;
        unsigned b7:1;
    }Bit;
} BYTE;

上記を使用してバイトの個々のビットにアクセスしていますが、これを使用して次の方法で io ポート値を割り当てるにはどうすればよいですか?

MCF_GPIO_PORTDD.Bit.b0 = 1;

_BYTE のタイプを割り当ててから、それにポートを割り当てたくありません。

#define MCF_GPIO_PORTDD             (*(vuint8 *)(&__IPSBAR[0x100009]))

MCF_GPIO_PORTDD は単なるメモリ アドレスです。

4

1 に答える 1

3

ポートポインターをvolatile unsigned char(8ビットint)にキャストしています。あなたのタイプに似たマクロを作ることができます:

#define PORTDD  (*(volatile BYTE *)(&__IPSBAR[0x100009]))

でアクセスしPORTDD.Bit.b0ます。._byte場合によっては、1 回のレジスタ書き込みで複数のビットを確実に設定 (またはクリア) する必要がある場合は、直接書き込む必要があることに注意してください。名前を付けない場合Bit(名前を匿名にするだけ)、C コンパイラで に短縮できる場合がありますPORTDD.b0

于 2011-04-28T05:42:27.867 に答える