質問
最近組込みシステム開発においてビットフィールドや共用体が用いられると習ったのですが、理由がいまいちわからなかったので、組込みシステム開発でビットフィールドや共用体が用いられる理由をわかりやすく解説していただけませんか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
CPUや周辺ハードの制御をするのにレジスタを用います。
レジスタはビットごとに意味を持っていることが多いので、ビットフィールドを構造体且つ共用体で定義するのが一般的かと思います。
別の回答でメモリの節約の話がありますが、最近の環境は組み込みと言っても大容量メモリを搭載していることも少なくなく、ビットで試行錯誤してまで実装するほどではないと思います。
とは言っても組み込みに限らずC言語ではビットでフラグ管理することは良くある話ですので使えるに越したことはありません。
投稿2019/06/20 12:38
総合スコア17000
0
既に解決済みとなっているようですが、、、
組込みの場合、外部I/Oの操作を行う事も多いです。その場合、個々のポートは 1bit 従って、ビットフィールドが無いと、その都度、何ビット目かの計算が必要になります。
また、CPUによっては、特定ビットのみのアクセスが可能なものがあります。バイト単位での書込みによる他のポートへの影響を防ぎます。
共用体については、構造体みたいな複数データのまとまりをある場所では、個々にアクセスし、別の場所ではまとめてアクセスするため。機器制御等の設定項目は多数ありますが、それらを単なるバイト列と見なす事で、扱いが容易となります。(通信で使う場合も、単なるバイト列の方が扱いやすい)
そう言えば、クラスの継承みたいに使う事もあった。先頭何バイトかを共通フラグにして、後半部分が異なるみたいに。そうする事で、一つの共通データとして扱えます。
まあ、メモリ領域の節約もありますが、そこまでギリギリに使う事は今は少ないじゃないかと思います。(今はそれより、バグが怖い)
そう言えば、プログラム本体は、Flashに置き、書き換え可能とし、実行時は、RAMに転送する事で、実行速度を稼ぐなんてのもありますね。
投稿2019/06/20 12:47
総合スコア6385
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
まずメモリの節約です。組み込み用のCPU内臓のRAMは大きいものでも4KBぐらいしかありません。なので、7以下なら3ビット等、必要な数値を格納できる最小のビット数を使います。通常Cコンパイラのcharは8ビットですから0〜15の値であれば1バイトに2個格納できるわけです。そのようにいかにメモリを効率よく使うか・・・ということでビットフィールドを、また、別々の処理に渡すパラメータがcharやintに別れる場合、同じ領域を使えるようにするため共用体を使うことが有ります。・・・だいぶ昔の知識なので、今は違うかも知れませんが、私の認識ではそういう場合が多いように思います。
投稿2019/06/20 12:14
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/20 13:19
2019/06/20 14:06
2019/06/20 23:20

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/06/20 14:05