【发布时间】:2018-10-12 17:33:29
【问题描述】:
我正在尝试将 c++ 代码转换为 python。
int fd_vdma = open("/dev/mem", O_RDWR|O_SYNC); // open uiox device for vdma access
if (fd_vdma < 1) {
printf("Invalid mem device file\n");
}
// mmap the vdma device for vdma access
unsigned int *ptr_vdma;
ptr_vdma = (unsigned int*)mmap(NULL, VDMA_MAP_SIZE,PROT_READ|PROT_WRITE,
MAP_SHARED, fd_vdma, VDMA_ADDR);
printf("DMA 1 virtual address: 0x%08x \n",ptr_vdma);
*(ptr_vdma+5) = FRBUF_ADDR_0;
*(ptr_vdma+7) = 2; // use internal fifos to trigger xfer
*(ptr_vdma+8) = 20480;
*(ptr_vdma+6) = (75 << 16) + (HORIZ_PIXELS_SMALL+75);
*(ptr_vdma+0x0D) = 200; // no. FIFO threshhold .. max.. 240
到目前为止,我已经完成了,
# vdm memory check
try:
fd_vdm_path = "/dev/mem"
mode = "rb+"
fd_vdm = open(fd_vdm_path, mode)
# print(fd_vdm.fileno())
print("[INFO] " + fd_vdm_path + " checked")
except Exception as error:
print("{}".format(error))
# mmap the VDMA device for VDM access
vdma_buf = mmap.mmap(fd_vdm.fileno(), int(VDMA_MAP_SIZE),
mmap.MAP_SHARED, mmap.PROT_READ|mmap.PROT_WRITE, 0)
ptr_vdm = ctypes.c_uint.from_buffer(vdma_buf)
print(type(ctypes.addressof(ptr_vdm)))
print("[INFO] " + fd_vdm_path + " has allocated virtual address : " +
hex(ctypes.addressof(ptr_vdm)))
但是我一直卡在这里,我不知道如何在python中执行以下操作。
*(ptr_vdma+5) = FRBUF_ADDR_0;
*(ptr_vdma+7) = 2; // use internal fifos to trigger xfer
*(ptr_vdma+8) = 20480;
*(ptr_vdma+6) = (75 << 16) + (HORIZ_PIXELS_SMALL+75);
*(ptr_vdma+0x0D) = 200; // no. FIFO threshhold .. max.. 240
我尝试vdma_buf.write(FRBUF_ADDR_0),但它不起作用,我在互联网上找不到任何东西(可能我没有很好地搜索它)
你能帮忙解决这个问题还是给我一些链接或教程?
【问题讨论】:
-
我的 Python 非常弱,但你可以利用
*(ptr_vdma+5)与ptr_vdma[5]相同的优势。 -
我之前试过了,它抛出了一个名为
TypeError: 'c_ulong' object does not support item assignment的错误
标签: c++ python-3.x cython ctypes debian-jessie