0

今、私は「プログラミング組み込みシステム」と呼ばれる初心者レベルの本を読んでいます。Cを使用して周辺機器のレジスタを操作する方法を説明するセクションが1つあります。

最初は例がありますが、わかりません。

uint32_t *pGpio0Set = (uint32_t *)(0x40E00018);

これは、32ビットの符号なし整数へのポインタを宣言していると思います。また、問題のレジスタがGPIOを制御し、レジスタがアドレス0x40E00018に存在することも推測できます。

私が理解していないのは、(0x40E00018)の前にある(uint32_t *)が何を意味し、それがどのような影響を与えるかです。

アンドリュー

4

2 に答える 2

1

これは型キャストと呼ばれます。通常、タイプを別のタイプに変換します。この場合、16進数をアドレスに変換します。その16進数の周りの括弧は不要です。

于 2012-04-25T03:15:06.287 に答える
0

これは、整数型から整数へのポインターへのキャストです。
そうしないと、コンパイラは、整数を別の型に割り当てると文句を言うでしょう。ポインターさえ、ほとんどが単なる整数です (どのプラットフォームでもそうではありません)。コンパイラーは、その数値を本当にアドレスとして使用するつもりなのかを確認したいと考えています。

于 2012-04-25T03:15:26.763 に答える