ビットフィールド
そういやそんなもんもあったなあ...
昔のルネサス以前の日立のH8とかの
ペリフェラルの定義が
ビットフィールドの塊だったなあ。
エンディアンが変わると大変なことに
なりそうだったけど。
日立のペリフェラル、中にはバイトアクセスのみ禁止、
なんてヘンテコなレジスタもあって、
公式のヘッダは、unionでアクセス可能な
形だけ定義してあったりした。
こういうのは、正しい使い方だな。
でも、ロボコン界隈、ヘッダファイルに
バイトアクセスのためのメンバを勝手に追加し、
それをnetで配布したりしている人も居たりしたなあ。
親切wのつもりなんだろうけど大変危険な行為ではあった。
------
unionも同じく、使わなくなって久しい。
10年以上は使ってないな。
使わない方が、コード読みやすいよね。
必要な時は、ポインタとキャストをぐるぐると巻き付けて
所望の動きをさせているかな。
単純な見た目だけだと、定義した方が
コード本体は文字数が少なくなるけど。
どうせ、そんなに多用しないし、何やってるか
パット見、分かる方がハンドリングがいいと思っている。
------
voidは... void*は、よく使うけどね。
そういや、ポインタじゃないvoid型って、
何に使う(使える)んだっけ?
| 固定リンク | 0
コメント
void ポインタですね。
void 型では受けとれないですね。
union は意味を持たせたい構造体の最初のアドレスから順番にuint8 でアクセスしたい時に使ってますね。
主に通信パケット作ってから、送信関数に引き渡すところです。
他に良い方法が思いつかなくて、組み込みだとDMA が良いんですかね。
投稿: ぶらざー | 2019年10月31日 (木) 09時29分
構造体や共用体のメンバが
どうアサインされるかは、言語的には
どうでもいいような気もしますが、
組み込み用途だと切実ですよね。
最近だとlong longなんかの話もあるし
ワード境界だけじゃなくて
8バイト境界を意識することさえあります。
stm32なんかは、かなりいい加減でも
動いちゃいますけど、全部が全部適当でもないようです。
考え方を都度切り替えるのが面倒なので、
いつからか、すべてポインタ(配列)で
記述するようになりました。
投稿: w | 2019年11月 4日 (月) 17時17分