« RISC-V? | トップページ | void型 »

2019年10月30日 (水)

ビットフィールド

そういやそんなもんもあったなあ...
昔のルネサス以前の日立のH8とかの
ペリフェラルの定義が
ビットフィールドの塊だったなあ。

エンディアンが変わると大変なことに
なりそうだったけど。

日立のペリフェラル、中にはバイトアクセスのみ禁止、
なんてヘンテコなレジスタもあって、
公式のヘッダは、unionでアクセス可能な
形だけ定義してあったりした。

こういうのは、正しい使い方だな。

でも、ロボコン界隈、ヘッダファイルに
バイトアクセスのためのメンバを勝手に追加し、
それをnetで配布したりしている人も居たりしたなあ。

親切wのつもりなんだろうけど大変危険な行為ではあった。

------

unionも同じく、使わなくなって久しい。
10年以上は使ってないな。
使わない方が、コード読みやすいよね。

必要な時は、ポインタとキャストをぐるぐると巻き付けて
所望の動きをさせているかな。

単純な見た目だけだと、定義した方が
コード本体は文字数が少なくなるけど。

どうせ、そんなに多用しないし、何やってるか
パット見、分かる方がハンドリングがいいと思っている。


------

voidは... void*は、よく使うけどね。
そういや、ポインタじゃないvoid型って、
何に使う(使える)んだっけ?

| |

« RISC-V? | トップページ | void型 »

コメント

void ポインタですね。
void 型では受けとれないですね。

union は意味を持たせたい構造体の最初のアドレスから順番にuint8 でアクセスしたい時に使ってますね。
主に通信パケット作ってから、送信関数に引き渡すところです。
他に良い方法が思いつかなくて、組み込みだとDMA が良いんですかね。

投稿: ぶらざー | 2019年10月31日 (木) 09時29分

構造体や共用体のメンバが
どうアサインされるかは、言語的には
どうでもいいような気もしますが、
組み込み用途だと切実ですよね。

最近だとlong longなんかの話もあるし
ワード境界だけじゃなくて
8バイト境界を意識することさえあります。

stm32なんかは、かなりいい加減でも
動いちゃいますけど、全部が全部適当でもないようです。

考え方を都度切り替えるのが面倒なので、
いつからか、すべてポインタ(配列)で
記述するようになりました。

投稿: w | 2019年11月 4日 (月) 17時17分

コメントを書く



(ウェブ上には掲載しません)




« RISC-V? | トップページ | void型 »