Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的内存映射寄存器_Python_Device Driver - Fatal编程技术网

Python中的内存映射寄存器

Python中的内存映射寄存器,python,device-driver,Python,Device Driver,有没有人能想出一个好的解决方案来在Python下使用内存映射设备寄存器?理想情况下,我可以使用命名寄存器,甚至是这些寄存器中的命名位字段,而不完全是临时的?理想情况下是跨平台的,但我只能使用Linux 看起来mmap和ctypes结构的一些组合可能能够处理它,但是a)结构似乎不允许您指定位字段位置(在C中也不允许,所以…),以及b)我不知道如何在mmap上放置结构映射 或者,我是在问我如何才能将circ锯用作螺丝刀?(也就是说,它不会这么做,你到底为什么要这么做?) C语言中的一个示例(未测试,

有没有人能想出一个好的解决方案来在Python下使用内存映射设备寄存器?理想情况下,我可以使用命名寄存器,甚至是这些寄存器中的命名位字段,而不完全是临时的?理想情况下是跨平台的,但我只能使用Linux

看起来mmap和ctypes结构的一些组合可能能够处理它,但是a)结构似乎不允许您指定位字段位置(在C中也不允许,所以…),以及b)我不知道如何在mmap上放置结构映射

或者,我是在问我如何才能将circ锯用作螺丝刀?(也就是说,它不会这么做,你到底为什么要这么做?)

C语言中的一个示例(未测试,不供使用)如下所示:

volatile struct {
    uint32_t mfr_id;
    uint32_t prod_id;
    uint32_t ctl;
    uint32_t dummy[5];
    ...
} * pDev;
hFile = open('/dev/bridge', O_RDWR)
pDev = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, hFile, 0);
assert(pDev->mfr_id == 0x12345678);
assert(pDev->prod_id == 0xDEADBEEF);

uint32_t temp = pDev->ctl;
temp &= CTL_ACCESS_MASK | CTL_SHIFT_MASK;
temp |= CTL_ACCESS_RO | CTL_SHIFT_5;
pDev->ctl = temp;

我认为最简单的方法是用C编写访问器函数并从Python调用它们(在ctypes和Cython之间,从Python调用C代码并不难)。

我不知道答案,但如果还没有库,创建一个库将是一个不错的项目!你为什么要这么做?请提供您试图解决的实际问题的详细信息。(我感觉你可能在尝试与串行或并行端口通信;这里有相应的库。)该模块擅长于位字段操作……但在一开始就无法帮助你获取数据。@Li aungYip,我希望如此。不,最终目标是通过PCIe VME网桥与VME卡通信。桥接器将有一个真正的内核空间驱动程序,允许VME地址空间的范围映射为PCI内存空间,但为每个VME卡执行内核空间驱动程序是不可行的,而且应该是不必要的。最有可能的是,这可以通过CType来完成,正如你所说,但我们需要更多关于如何开始的信息。你能链接到一个C语言的例子来与内存映射的设备寄存器通信吗?