写了一个延时函数内容很简单如下:

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 ,这样每次用到这个变量时都会再去内存中重新查询这个值;这样这个延时就正常了;

Copyright © 2088 樊振东世界杯_世界杯开幕 - tyzksb.com All Rights Reserved.
友情链接