障碍 - 如何确定对寄存器的写操作已经完成?

Barriers - how to be sure that a write operation on a register has been completed?

我需要初始化中断控制器 (GICv3),ARM。为此,我需要设置一些寄存器,但仅在初始化寄存器 CTLR 之后。在进行其他写入操作之前,我必须确保 CTLR 寄存器已完全写入。

为此,我找到了 arm memory barriers。为了保证行为,我虽然操作如下:

/* write CTLR
* isb()
* dmb();
* writing the other registers */

我不是这个领域的专家,我不确定是否正确理解障碍:isbdmb 的组合是否可以保证预期的行为?

不,光保证还不够。 屏障并不意味着接收设备(在本例中为 GICv3)实际上已经接收到命令并且您完成了寄存器写入。 您需要手动检查它(例如,here)。