0

ARM プロセッサで実行されるサンプル コードを使用してきました。特定のメモリ位置を読み取るために、定数値をアドレスにキャストします。

例えば:

0xa0000000 のメモリ値を読み取りたい

サンプル コードは次のようになります。

uint32_t test_data;

const uint32_t test_address = 0xa0000000;

test_data = *(uint32_t*) test_address;

キャスト *(uint32_t*) がよくわかりません。* 1つだけで十分だと思います。

少し説明をいただければ幸いです。

ありがとう。

4

3 に答える 3

2

ポインターを uint32_t へのポインターではなく、uint32_t として格納しています。そのため、追加キャストを行う必要があります。

次のことをお勧めします。

#include <iostream>

int main(int argc, const char** argv) {
    volatile uint32_t* const test_address = reinterpret_cast<uint32_t*>(0xa0000000);
    uint32_t value = *test_address;
    return 0;
}
于 2015-01-09T21:25:20.820 に答える
1

キャスト(uint32_t*) test_addressは の値をアドレスとして再解釈し、test_addressそのアドレスを指すポインターを生成します。この C キャストには と同じ効果がreinterpret_castあり、実際にreinterpret_castは代わりに使用する必要があります。

ポインターが指している値、つまりそのポインティーも取得するには、 を介して逆参照する必要があり*ます。これにより* ((uint32_t*) test_address)、 または同等のが得られ*(uint32_t*) test_addressます。

于 2015-01-09T21:24:53.663 に答える