【发布时间】:2021-01-30 02:41:30
【问题描述】:
在 C 或 C++ 中写入硬件(比如 FIFO)时是否需要使用 volatile。从在线文档中很容易确认volatile在读取硬件时是必要的,但是写入呢?我担心优化器可能会消除将值数组写入 FIFO 的循环,而只写入最后一个条目。
【问题讨论】:
-
当您说“写入硬件”时,您的意思是像 MMIO 之类的东西? IE。总是在同一个地址的东西?这就是您担心连续写入可能会优化到最后一个的原因吗?
-
是的,这是必要的。否则编译器可能会优化所有内容,甚至不会保留最后一次写入。
-
@MarcoBonelli:我确实是指写入 FPGA 中的单个地址,这是一个信箱。我将连续值写入该地址,FPGA 对其进行解释和操作。许多其他微处理器连接的 I/O 芯片以相同的方式工作,并且许多外围设备集成到现代处理器和 DSP 中
-
@12431234123412341234123 我的意思是……不一定。 MMIO 和 PMIO 是一回事。
-
@12431234123412341234123:你能引用你的声明的来源吗?我检查了 K&R、Modern C、Practical C、C in a Nutshell、Misra 2004 以及其他可能没有成功的内容。