2

マイクロコントローラーに付属のヘッダーファイルでこのステートメントを見つけましたが、評価方法がわかりません

#define FIO0SET        (*(volatile unsigned long *)(FIO_BASE_ADDR + 0x18))

私はこの表現が何であるかについて最も霧深い考えを持っていないので、意味のある研究を始める方法がありません。この獣が何であるか、またはそれを評価する方法を誰かに教えてもらえますか?

4

1 に答える 1

8
#define FIO0SET  (*(volatile unsigned long *)(FIO_BASE_ADDR + 0x18))

メモリアドレスに移動し、その場所に格納されている32FIO_BASE_ADDR + 0x18ビット(32ビットの場合)のワードを取得します。は変更可能な左辺値でもあるため、値を割り当てることができます。unsigned longFIO0SET

volatile修飾子は、オブジェクトの値が未知の方法で変更される可能性があることをコンパイラーに通知するために使用されることに注意してください。入力モードのIOレジスタの例を考えてみましょう。その値は予期せず変更される可能性があり、コンパイラは、読み取り後に値が変更されなかったと見なすことはできません。

例えば:

unsigned long register_value;

register_value = FIO0SET; // store FIO0SET in register_value object

また

FIO0SET = 0x1122334;      // store 0x1122334 value in FIO0SET register 
于 2012-10-24T17:28:11.377 に答える