添加
nop
是在再次从寄存器地址读取之前添加一些延迟以获得预期值并退出 while 循环的好主意吗?
或者在RISC-V机器中继续读取寄存器直到read_reg_val != 1
以提高性能?
我的思考过程是
Solution 1
是一个更好的主意,等待1个时钟周期,而不是像Solution 2
那样不必要地读取寄存器。
这两种解决方案的
pros
和 cons
会是什么?
Solution 1
uint32_t read_reg_val = (*((volatile const uint32_t *)(reg_addr)));
while (read_reg_val)
{
asm("nop");
read_reg_val = (*((volatile const uint32_t *)(reg_addr)));
}
Solution 2
uint32_t read_reg_val = (*((volatile const uint32_t *)(reg_addr)));
while (read_reg_val)
{
read_reg_val = (*((volatile const uint32_t *)(reg_addr)));
}