共用体とビットフィールドの使い方

スポンサーリンク

こんにちは!駆け出しエンジニアのまっきーです。

今回は、ビットフィールドについて解説したいと思います。

組み込みエンジニアとして働いていくからには、メモリ操作の技術はとても大切です。では早速やっていきましょう!

共用体とは

まず、共用体について説明します。

共用体とはデータ構造の一種です。
メモリ領域を複数の変数で共有して扱うことが出来ます。

構造体ととても良く似ています。次のように定義します。

共用体使用例

ナナさんのこちらのサイトからの引用です。

ソファーベッドってソファーとベッドの2つの役割がありますよね。

共用体を使うことで1つで2つの役割を担わせることができます。

このように、同じメモリに対して異なるアクセスが可能になります。

とても分かりやすいです。ナナさん、ありがとうございます。

ビットフィールドとは

ひとつのメモリ領域(バイト単位)に名前をつけてビット単位に振り分けるものです

つまり、データをビット単位で扱うことができます。例えば、int型は4バイトです。(環境によります)0と1を表すためだけにこれを用いるのはメモリの無駄になります。

そこで、ビットフィールドをを用いることでメモリを効率よく利用できるようになります

ビットフィールドは構造体のメンバーとして定義します。

ビットフィールド使用例

実際のビットフィールドの作り方を説明します。

上の例ではA0とA1にしかアクセスしていませんが、このように一つ一つのビットを操作できるようになります!

ビットフィールドと共用体

共用体とビットフィールドを用いることで、8ビットのフィールドを1バイトとして参照できるようになります。やっていることは、ビットフィールドそのものを共用体としているだけです。

サンプルコードを見てみましょう。

メイン関数の中で、ビットフィールドA_RESISTAの値は0b00001011(0x0B)となっています。

バイト単位で参照しているA_RESISTA.BYTEは16進数で表示されています。Bと表示されているので、1バイト単位で参照できていることがわかりますね!

まとめ

共用体やビットフィールドを活用することで、ビット単位での操作ができます。

このような操作ができるのも、Cならではといった感じがしますね。

最初にメモリ操作は大切とは言ったものの、ビットフィールドを使わずともビット演算で解決してしまうことも多いようです。なので実際の現場ではあまり頻繁に使われるわけではないそうです。

ですが、知っておいて損のない知識であると思います。次回はラズパイで実際にビットフィールドを使ってみようと思います!

ありがとうございました!

タイトルとURLをコピーしました