gpt4 book ai didi

c - 使用 C 的定时器代码中的空循环含义

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:46 25 4
gpt4 key购买 nike

void Tmr_Wait1us (uint16_t delay) {
uint16_t i;
TCNT0 = 0; // will start to count from 0 up to 255 (if 8-bit timer)
for (i = 0; i < delay / 256; i++)
while (TCNT0 < 255)
;
while (TCNT0 <= delay % 256)
;
}

此代码用于设置计时器以等待精确的时间量,以应用于 AVR-Atmega32a ,我不明白这里的空循环是做什么的?还有第二个循环是做什么的?

最佳答案

TCNT0 是定时器 0(一个 8 位定时器)的当前定时器计数。由于它与您的代码异步计数,因此即使 CPU 处于自旋等待状态,它也会递增。

但是由于 avr-libc 在 util/delay.h 中提供了相当精确的自旋等待你通常最好不要使用它们。

for (int i = 0; i < delay; i++)
_delay_us(1);

关于c - 使用 C 的定时器代码中的空循环含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40315285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com