3

我正在为我的 FPGA 中的设备编写 petalinux 驱动程序,并且我已经实现了 mmap 功能以控制用户空间中的设备。我的问题是,如果我正在使用

vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);

在用户应用程序的 mmap 函数和MAP_SHARED标志中,似乎启用了缓存。

我所做的测试是向我的映射设备的特定寄存器写入一个值(比如 5),该寄存器实际上只存储来自 AXI 总线的数据的最低有效位。如果我在写入操作后立即读取,我希望读取 1(在 Microblaze 上使用裸机应用程序时发生这种情况),而不是读取 5。但是,该值已正确写入寄存器,因为必须发生什么...... ..发生。

提前致谢。

4

1 回答 1

1

根据问题评论中讨论的内容,address此处分配的指针:

address = mmap(NULL, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

没有使用类型限定符声明volatile,允许编译器对其进行假设,从而导致对读/写操作的潜在编译时间优化。

于 2016-08-06T22:53:09.133 回答