有没有人提出在 Python 下使用内存映射设备寄存器的好的解决方案?理想情况下,允许我以一种不完全是临时的方式使用命名寄存器,甚至这些寄存器中的命名位域的东西?理想情况下是跨平台的,但我只能使用 Linux。
似乎 mmap 和 ctypes Structs 的某种组合可能能够处理它,但是 a) Structs 似乎不允许您指定位域位置(在 C 中也不允许,所以...),以及 b ) 我不知道如何将结构映射放在 mmap 之上。
或者我是在问如何将圆锯用作 Screwdriver ? (即它不会那样做,你到底为什么要这么做?)
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 代码并不难)。
关于python - Python 中的内存映射寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587639/