我在petalinux中为FPGA中的设备编写了一个驱动程序,我已经实现了mmap功能,以便在用户空间中控制设备。我的问题是,如果我正在使用
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
在用户应用程序的mmap函数和MAP_SHARED
标志中,似乎已启用缓存。
我做的测试是将值(比如5)写入我的mmaped设备的特定寄存器,该寄存器实际上只存储来自AXI总线的最低有效数据位。如果我在写入操作后立即读取,我希望读取1(这在Microblaze上使用裸机应用程序时发生),而不是我读取5.但是,值正确地写在寄存器中,因为必须发生的事情。 ..happens。
提前致谢。
答案 0 :(得分:0)
根据问题评论中讨论的内容,此处指定了address
指针:
address = mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
未使用类型限定符volatile
声明,允许编译器对其进行预测,从而导致对读/写操作的潜在编译时优化。