在SysTick寄存器 *** 作中写的延时程序中while(temp&0x01&&!(temp&(1<<16)))是什么意思?

在SysTick寄存器 *** 作中写的延时程序中while(temp&0x01&&!(temp&(1<<16)))是什么意思?,第1张

while(temp&0x01&&!(temp&(1<<16)))这句话的意思就是判断计数器是否计数完成需要两个条件,第一个条件是计数值为0就是temp&0x01为0,另一个条件就是SysTick->CTRL寄存器的第十六位的标志位countflag为1时,两个条件满足时就完成计时,就跳出循环。

从现象上来说,确实是阻塞了CPU,

延时的目的就是让CPU停住一段时间。

systick嘀嗒定时器在延时的时候,一直判断标志位,用while语句,这样cpu就一直停在这里了,知道标志位置位,再跳出等待,这样就实现精准延时了。

还有问题,欢迎追问。

无法做到不适用cpu,但是有方法可以让延时的时候不让cpu原地等待。

举个周期性执行程序但不让CPU等待的例子:

你设置一个足够大变量为clock,初始值为零,把它放在Systick中断函数里面执行clock++;

假设Systick中断周期为1ms,那么你再设置一个变量为clockA,初始值为0,在再主循环使用

if(clock-clockA >1000)

{

clockA = clock

……;

}

这样就可以不让CPU等待,但又达到了周期性处理的目的。

只想执行一次的话,就加一个条件判断就好了,这点就自己摸索吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11485027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存