1

内存映射硬件

在某些计算架构上,指针可用于直接操作内存或内存映射设备。

在对微控制器进行编程时,为指针分配地址是一种非常宝贵的工具。下面是一个简单的例子,它声明了一个 int 类型的指针并将它初始化为一个十六进制地址,在这个例子中是常量 0x7FFF:

int *hardware_address = (int *)0x7FFF;

在 80 年代中期,使用 BIOS 访问 PC 的视频功能很慢。显示密集型应用程序通常用于通过将十六进制常量 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 回答