1

メモリマップドハードウェア

一部のコンピューティングアーキテクチャでは、ポインタを使用してメモリまたはメモリマップドデバイスを直接操作できます。

ポインタへのアドレスの割り当ては、マイクロコントローラをプログラミングする際の非常に貴重なツールです。以下は、int型のポインターを宣言し、それを16進アドレスに初期化する簡単な例です。この例では定数0x7FFFです。

int * hardware_address =(int *)0x7FFF;

80年代半ばには、BIOSを使用してPCのビデオ機能にアクセスするのは遅かった。表示を多用するアプリケーションは、通常、16進定数0xB8000を80個の符号なし16ビットint値の配列へのポインターにキャストすることにより、CGAビデオメモリに直接アクセスするために使用されていました。各値は、下位バイトのASCIIコードと、上位バイトの色で構成されていました。したがって、文字「A」を行5、列2に明るい白、青で配置するには、次のようなコードを記述します。

#define VID ((unsigned short (*)[80])0xB8000)

void foo() {
    VID[4][1] = 0x1F00 | 'A';
}

ポインタがない場合、Java / Pythonでそのようなことは可能ですか?

編集:

そのようなアクセスは可能ですか:

char* m_ptr=(char*)0x603920;
printf("\nm_ptr: %c",*m_ptr);

4

2 に答える 2

3

私は文脈がまったくわからないので、あなたがやろうとしていることの有用な応用ですが、ここに行きます:

Java Native Interfaceは、プロセススペース内でのダイレクトメモリアクセスを許可する必要があります。同様に、Pythonはアクセスメソッドを提供するcモジュールをロードできます。

ただし、インターフェイスを実行するためにシステムによってロードされたドライバーがない限り、ハードウェアデバイスのメモリは範囲外になります。それでも、ドライバ/カーネルモジュールは非アプリケーションスペースメモリをアドレス指定するものでなければなりません。

于 2013-03-11T20:42:59.337 に答える
1

を使用しているオペレーティングシステムを使用している場合は、その上に/dev/memを作成しMappedByteBufferて、この種のことを行うことができます。

于 2013-03-11T21:22:03.563 に答える