2013-03-11 45 views
1

内存映射硬件原始存储器存取的Java/Python的

在某些计算架构,指针可以用来直接 操纵存储器或存储器映射的设备。

分配地址的指针编程 微控制器时,是一个宝贵的工具。下面是一个简单的例子声明 int类型的指针并且在该示例 它初始化为十六进制地址的常数0x7FFF的:

INT * hardware_address =(INT *)0x7FFF的;

在80年代中期,使用BIOS来访问电脑 的视频功能是缓慢的。那是显示密集型应用通常直接由铸造十六进制常数 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); 

+0

你能解释一下你想要做什么吗? – 2013-03-11 20:41:36

+0

只是阅读[这](http://en.wikipedia.org/wiki/Pointer_%28computer_programming%29) – 4pie0 2013-03-11 20:47:18

回答

3

我完全不明朗的背景下和你想要做什么。因此有用的应用,但在这里有云:

Java Native Interface应该允许进程空间内的直接内存访问。同样,python can load c module将提供一种访问方法。

除非你有被系统做接口加载的驱动程序,然而,任何硬件设备内存会出界外。即使如此,驱动程序/内核模块也必须是解决非应用程序空间内存的模块。

+0

请参阅编辑 – 4pie0 2013-03-11 21:06:33

1

如果你是一个操作系统/dev/mem上,你可以创建一个MappedByteBuffer到它,做这样的事情。

+0

感谢,你可以请给一些更多的细节/链接? – 4pie0 2013-03-11 21:23:20

+0

MappedByteBuffer上的标准Java文档,结合'man mem'或'man proc'(for/proc/PID/mem)的结果会告诉你你想要什么。 – bmargulies 2013-03-11 21:28:13

+0

谢谢@bmargulies – 4pie0 2013-03-11 21:35:16