1

10個の独立した「レジスタ」に分割された320ビットを含む連続したメモリ領域があります。

メモリ領域を作成すると、最初のレジスタ要素のアドレスが返されます。

この時点で、32 ビット数値の上位部分と下位部分を含む 32 ビット構造体の配列を論理的にマップし、配列を反復処理して上位セグメントと下位セグメントを別々に書き込みます。

ビットローテーションスキームを使用して、32ビット数を2つの16ビット部分に分割して入力する関数が既にあります。

私の質問は、連続した領域に構造体の配列をオーバーレイする最良の方法は何ですか。

これを行う必要がある理由は、組み込みデバイスと通信するために外部ライブラリを使用しており、ライブラリには 32 ビットの概念がなく、基礎となるデバイスがデータを 32 ビット レジスタに格納していてもです。

4

1 に答える 1

1

まず、構造体がコンパイラによって表される 32 ビットであることを確認します。sizeof(struct xxx) == 4 であることを確認し、そうなるまでコンパイラのパッキング オプションを試します (技術的には、構造体が 4 文字であることを保証しますが、十分なはずです)。

2 つ目は、構造体型のオブジェクトへのポインターを作成し、メモリ ブロックのアドレスを割り当てることです。そのためには、昔ながらの型キャスト操作が必要になります。

のようなもの (上位と下位の順序、およびこれらの内部のバイトはハードウェアによって異なることに注意してください)。

typedef struct {
   short high;
   short low;
} hilo;

hilo *registers = (hilo *) memPtr;
于 2012-12-01T21:23:46.943 に答える