有没有人想出一个在Python下使用内存映射设备寄存器的好解决方案?理想情况下,某些东西可以让我使用命名寄存器,甚至在这些寄存器中命名位域,这种方式不完全是临时的?理想情况下是跨平台的,但我只能使用Linux。
似乎mmap和ctypes Structs的某些组合可能能够处理它,但是a)结构似乎不允许你指定位域位置(它们也不在C中,所以...)和b我无法弄清楚如何在mmap上删除Struct映射。
或者我是否从根本上询问如何使用圆锯作为螺丝刀? (即它没有那样做,为什么你想要?)
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;
答案 0 :(得分:0)
我认为最简单的方法是在C中编写访问器函数并从Python调用它们(在ctypes和Cython之间,从Python调用C代码并不那么难)。