障碍-如何确保寄存器上的写入操作已经完成



我需要初始化一个中断控制器(GICv3(,ARM。要做到这一点,我需要设置一些寄存器,但只有在初始化寄存器CTLR之后。在进行其他写入操作之前,我必须确保CTLR寄存器已完全写入。

为了做到这一点,我发现了手臂记忆的障碍。为了保证行为,我想操作如下:

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

我不是这方面的专家,也不确定是否正确理解了障碍:isbdmb的组合能保证预期的行为吗?

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