0

どのメモリアドレスが使用に適しているかを知るにはどうすればよいですか?

具体的には、特定のアドレスの使用方法の例を次に示します。特定の固定アドレスへのポインタですが、これが読み取り/書き込みに有効なアドレスである理由に関する情報はありません。

xそのアドレスがy使えるかどうかを知る方法が欲しいのですが。

これは、特定のシミュレーターがなくても、メモリマップドIOと同様のことができるようにするためです。(リンクされた質問は関連しているので、Ubuntuでのテストに1セットのアドレスを使用し、実際のソフトウェアオンチップに別のアドレスセットを使用できます)

Ubuntu固有の回答をお願いします。

4

3 に答える 3

4

malloc()メモリアドレスが返すものは何でも使用できます。さらに、必要なメモリ量を指定できます。そして、realloc()後で気が変わることさえあります。

于 2013-02-04T13:20:16.293 に答える
3

ここでは、2 つの独立したトピックを混在させています。リンクしている質問は、マイクロ コントローラーのメモリ マップド IO に関するものです。Atmel の Microcontroller であるATM128を指しています。その質問のOPは、そのレジスタの1つに書き込もうとしています。これらのレジスタには特定のアドレスが与えられています。

レジスタのアドレスに書き込もうとしている場合は、メモリ マップド IO がどのように機能するかを理解する必要があります。作業中のチップセット/IC の仕様を読む必要があります。「Ubuntu固有の回答」についてこれを尋ねることは無意味です。

Ubuntu OS で実行されているプログラムは、独自の仮想アドレス空間で実行されています。したがって、アドレスが使用可能かどうかを尋ねるxyは無意味です...ハードウェアにアクセスしていない限り、特定のアドレスを探す意味はありません.OSが提供するものを使用するだけで、あなたが良いことがわかります.


編集に基づいて、メモリ マップド IO のシミュレーションを実行しようとしているという事実に基づいて、次のようなことができます。

#ifdef SIMULATION
    unsigned int TX_BUF_REG;  // The "simulated" 32-bit register
#else
#define TX_BUF_REG 0x123456   // The actual address of the reg you're simulating
#endif

次に、アクセサ マクロを使用して、マスクを介して特定のビットを読み書きします (通常は行われます)。

#define WRITE_REG_BITS(reg, bits) {reg |= bits;}
...
WRITE_REG_BITS(TX_BUF_REG, SOME_MASK);

静的変数はこのようにシミュレーションで使用できるため、どのアドレスに書き込むのが「安全」であるかを心配する必要はありません。

于 2013-02-04T13:17:38.810 に答える