写了一个延时函数内容很简单如下:
void delay_ms(uint64_t ms)
{
uint64_t temp=SYS_TIME+ms;
while (SYS_TIME<=temp);
}
SYS_TIME是在定时器中断中累加的一个值,每ms触发一下;
可是发现一个问题,temp=200; SYS_TIME=2000;这明显不对,因为之前用的芯片编译器都没有把变量给优化掉,就没注意这个问题,现在编译器每次判断时,读取的还是之前缓存的值,而不是当前内存的最新值,相当于这个延时永远都不会结束;
在SYS_TIME这个变量前加一个关键字volatile ,这样每次用到这个变量时都会再去内存中重新查询这个值;这样这个延时就正常了;