最近,在开发一个延时阻塞接口时,遇到了一些问题
一般来说,计算机指令的执行速度十分快,一般是微秒级的。
所以,如果按照以下的编码逻辑,可能会导致延时不准确,设置是持续阻塞
int delay(void)
{
int i, j;
for (i = 0; i < 1000; i++)
for (j = 0; j < 1000; j++);
}
这里的临时变量是int i, j
可能会由于执行速度太快,然后进行优化,导致i++, j++并未更新为最新的值。
所以这里需要进行这样定义
volatile int i, j; // 每次i与j的更新,都会同步内存与寄存器,使其保持一致